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