From 900c0972923ac0eeac54425f128d38dffefd381b Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期一, 30 十一月 2020 12:06:41 +0800 Subject: [PATCH] sendandrecv改为线程安全的 --- src/socket/net_mod_socket.h | 73 +++++++++++++++++------------------- 1 files changed, 35 insertions(+), 38 deletions(-) diff --git a/src/socket/net_mod_socket.h b/src/socket/net_mod_socket.h index febb429..df5aa7f 100644 --- a/src/socket/net_mod_socket.h +++ b/src/socket/net_mod_socket.h @@ -10,6 +10,8 @@ #define PUT(p, val) (*(uint32_t *)(p) = (val)) +#define ERROR_NET_MOD_SOCKET_ADDR_IN_USE 1 + @@ -61,17 +63,14 @@ int nready; /* Number of ready descriptors from select */ int maxi; /* Highwater index into client array */ struct pollfd conns[OPEN_MAX]; - // net_node_t *nodes[FD_SETSIZE]; - // rio_t clientrio[FD_SETSIZE]; /* Set of active read buffers */ - // std::map<int, net_node_t*> connfdNodeMap; - std::map<std::string, int> connectionMap; + // std::map<std::string, int> connectionMap; } ; friend class NetModServerSocket; private: ShmModSocket shmModSocket; - pool req_resp_pool; + // pool req_resp_pool; @@ -81,14 +80,16 @@ static void * encode_response_head(net_mod_response_head_t & response); static net_mod_response_head_t decode_response_head(void *_headbs); - void init_req_rep_req_resp_pool(); - int connect( net_node_t*); - void close_connect(int connfd); + void init_conn_pool( pool& mpool); + int connect(pool& mpool, net_node_t* node); + void close_connect(pool& mpool , int connfd); int read_response(int clientfd, net_mod_recv_msg_t *recv_msg); int write_request(int clientfd, net_mod_request_head_t &request_head, void *send_buf, int send_size); int _sendandrecv_(net_node_t *node_arr, int node_arr_len, void *send_buf, int send_size, net_mod_recv_msg_t ** recv_arr, int *recv_arr_size, int timeout); + + public: @@ -100,13 +101,13 @@ * 缁戝畾绔彛鍒皊ocket, 濡傛灉涓嶇粦瀹氬垯绯荤粺鑷姩鍒嗛厤涓�涓� * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 */ - int bind( int port); + int bind( int key); /** * 寮哄埗缁戝畾绔彛鍒皊ocket, 閫傜敤浜庣▼搴忛潪姝e父鍏抽棴鐨勬儏鍐典笅锛岄噸鍚▼搴忕粦瀹氬師鏉ヨ繕娌¢噴鏀剧殑key * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 */ - int force_bind( int port); + int force_bind( int key); /** * 濡傛灉寤虹珛杩炴帴鐨勮妭鐐规病鏈夋帴鍙楀埌娑堟伅浼氫竴鐩寸瓑寰� @@ -144,40 +145,36 @@ net_mod_recv_msg_t ** recv_arr, int *recv_arr_size); - - - - /** * 鍙戦�佷俊鎭� - * @port 鍙戦�佺粰璋� + * @key 鍙戦�佺粰璋� * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 */ - int sendto( const void *buf, const int size, const int port); + int sendto( const void *buf, const int size, const int key); // 鍙戦�佷俊鎭秴鏃惰繑鍥炪�� @sec 绉� 锛� @nsec 绾崇 - int sendto_timeout( const void *buf, const int size, const int port, int sec, int nsec); + int sendto_timeout( const void *buf, const int size, const int key, int sec, int nsec); // 鍙戦�佷俊鎭珛鍒昏繑鍥炪�� - int sendto_nowait( const void *buf, const int size, const int port); + int sendto_nowait( const void *buf, const int size, const int key); /** * 鎺ユ敹淇℃伅 - * @port 浠庤皝鍝噷鏀跺埌鐨勪俊鎭� + * @key 浠庤皝鍝噷鏀跺埌鐨勪俊鎭� * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 */ - int recvfrom( void **buf, int *size, int *port); + int recvfrom( void **buf, int *size, int *key); // 鎺ュ彈淇℃伅瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇 - int recvfrom_timeout( void **buf, int *size, int *port, int sec, int nsec); - int recvfrom_nowait( void **buf, int *size, int *port); + int recvfrom_timeout( void **buf, int *size, int *key, int sec, int nsec); + int recvfrom_nowait( void **buf, int *size, int *key); /** * 鏈湴鍙戦�佽姹備俊鎭苟绛夊緟鎺ユ敹搴旂瓟 - * @port 鍙戦�佺粰璋� + * @key 鍙戦�佺粰璋� * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 */ - int sendandrecv( const void *send_buf, const int send_size, const int send_port, void **recv_buf, int *recv_size) ; + int sendandrecv( const void *send_buf, const int send_size, const int send_key, void **recv_buf, int *recv_size) ; // 瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇 - int sendandrecv_timeout( const void *send_buf, const int send_size, const int send_port, void **recv_buf, int *recv_size, int sec, int nsec) ; - int sendandrecv_nowait( const void *send_buf, const int send_size, const int send_port, void **recv_buf, int *recv_size) ; + int sendandrecv_timeout( const void *send_buf, const int send_size, const int send_key, void **recv_buf, int *recv_size, int sec, int nsec) ; + int sendandrecv_nowait( const void *send_buf, const int send_size, const int send_key, void **recv_buf, int *recv_size) ; /** @@ -191,35 +188,35 @@ * 璁㈤槄鎸囧畾涓婚 * @topic 涓婚 * @size 涓婚闀垮害 - * @port 鎬荤嚎绔彛 + * @key 鎬荤嚎绔彛 */ - int sub( void *topic, int size, int port); + int sub( void *topic, int size, int key); // 瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇 - int sub_timeout( void *topic, int size, int port, int sec, int nsec); - int sub_nowait( void *topic, int size, int port); + int sub_timeout( void *topic, int size, int key, int sec, int nsec); + int sub_nowait( void *topic, int size, int key); /** * 鍙栨秷璁㈤槄鎸囧畾涓婚 * @topic 涓婚,涓婚涓虹┖鏃跺彇娑堝叏閮ㄨ闃� * @size 涓婚闀垮害 - * @port 鎬荤嚎绔彛 + * @key 鎬荤嚎绔彛 */ - int desub( void *topic, int size, int port); + int desub( void *topic, int size, int key); // 瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇 - int desub_timeout( void *topic, int size, int port, int sec, int nsec); - int desub_nowait( void *topic, int size, int port); + int desub_timeout( void *topic, int size, int key, int sec, int nsec); + int desub_nowait( void *topic, int size, int key); /** * 鍙戝竷涓婚 * @topic 涓婚 * @content 涓婚鍐呭 - * @port 鎬荤嚎绔彛 + * @key 鎬荤嚎绔彛 */ - int pub( char *topic, int topic_size, void *content, int content_size, int port); + int pub( char *topic, int topic_size, void *content, int content_size, int key); // 瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇 - int pub_timeout( char *topic, int topic_size, void *content, int content_size, int port, int sec, int nsec); - int pub_nowait( char *topic, int topic_size, void *content, int content_size, int port); + int pub_timeout( char *topic, int topic_size, void *content, int content_size, int key, int sec, int nsec); + int pub_nowait( char *topic, int topic_size, void *content, int content_size, int key); -- Gitblit v1.8.0