From 6dbf38a923b9b902e2a75f0c9f157450816d7d95 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 23 七月 2020 18:07:49 +0800
Subject: [PATCH] update

---
 src/socket/shm_socket.c |   33 +++++++++++++++++++++++++++++----
 1 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/src/socket/shm_socket.c b/src/socket/shm_socket.c
index 5b8b9c0..185ecaf 100644
--- a/src/socket/shm_socket.c
+++ b/src/socket/shm_socket.c
@@ -96,7 +96,8 @@
 
 // print_msg("===accept:", src);
 		client_port = src.port;
-		client_socket = (shm_socket_t *)malloc(sizeof(shm_socket_t));
+		// client_socket = (shm_socket_t *)malloc(sizeof(shm_socket_t));
+		client_socket = shm_open_socket(socket->socket_type);
 		client_socket->port = socket->port;
 		// client_socket->queue= socket->queue;
 		//鍒濆鍖栨秷鎭痲ueue
@@ -211,7 +212,7 @@
 
 int shm_recv(shm_socket_t* socket, void **buf, int *size) {
 	if(socket->socket_type != SHM_SOCKET_STREAM) {
-		err_exit(0, "can not invoke shm_recv method with a socket which is not a SHM_SOCKET_STREAM socket");
+		err_exit(0, "can not invoke shm_recv method in a %d type socket  which is not a SHM_SOCKET_STREAM socket ", socket->socket_type);
 	}
 	shm_msg_t src;
 
@@ -232,6 +233,9 @@
 
 // 鐭繛鎺ユ柟寮忓彂閫�
 int shm_sendto(shm_socket_t *socket, const void *buf, const int size, const int port) {
+	if(socket->socket_type != SHM_SOCKET_DGRAM) {
+		err_exit(0, "Can't invoke shm_sendto method in a %d type socket  which is not a SHM_SOCKET_DGRAM socket ", socket->socket_type);
+	}
 	hashtable_t *hashtable = mm_get_hashtable();
 
 	if(socket->queue == NULL) {
@@ -272,6 +276,9 @@
 
 // 鐭繛鎺ユ柟寮忔帴鍙�
 int shm_recvfrom(shm_socket_t *socket, void **buf, int *size, int *port){
+	if(socket->socket_type != SHM_SOCKET_DGRAM) {
+		err_exit(0, "Can't invoke shm_recvfrom method in a %d type socket  which is not a SHM_SOCKET_DGRAM socket ", socket->socket_type);
+	}
 	hashtable_t *hashtable = mm_get_hashtable();
 	if(socket->queue == NULL) {
 		if(socket->port == -1) {
@@ -302,6 +309,22 @@
 	}
 }
 
+int shm_sendandrecv(shm_socket_t *socket, const void *send_buf, const int send_size, const int send_port, void **recv_buf, int *recv_size) {
+	if(socket->socket_type != SHM_SOCKET_DGRAM) {
+		err_exit(0, "Can't invoke shm_sendandrecv method in a %d type socket  which is not a SHM_SOCKET_DGRAM socket ", socket->socket_type);
+	}
+	int recv_port;
+	int rv;
+
+	shm_socket_t *tmp_socket = shm_open_socket(SHM_SOCKET_DGRAM);
+	if (shm_sendto(tmp_socket, send_buf, send_size, send_port) == 0) {
+		rv = shm_recvfrom(tmp_socket, recv_buf, recv_size, &recv_port);
+		shm_close_socket(tmp_socket);
+		return rv;
+	}
+	return -1;
+}
+
 
 /**
  * 缁戝畾key鍒伴槦鍒楋紝浣嗘槸骞朵笉浼氬垱寤洪槦鍒椼�傚鏋滄病鏈夊搴旀寚瀹歬ey鐨勯槦鍒楁彁绀洪敊璇苟閫�鍑�
@@ -323,11 +346,13 @@
 
 void _server_close_conn_to_client(shm_socket_t* socket, int port) {
 	shm_socket_t *client_socket;
-	auto iter = socket->clientSocketMap->find(port);
+	std::map<int, shm_socket_t* >::iterator iter = socket->clientSocketMap->find(port);
 	if( iter !=  socket->clientSocketMap->end() ) {
+		client_socket = iter->second;
+		free((void *)client_socket);
 		socket->clientSocketMap->erase(iter);
 	}
-	free((void *)client_socket);
+	
 
 }
 

--
Gitblit v1.8.0