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