浏览代码

closesocket thread-safe when reconnecting

ithewei 3 年之前
父节点
当前提交
4713894f07
共有 2 个文件被更改,包括 8 次插入4 次删除
  1. 1 1
      event/nio.c
  2. 7 3
      evpp/TcpClient.h

+ 1 - 1
event/nio.c

@@ -222,7 +222,7 @@ static void nio_connect(hio_t* io) {
     }
 
 connect_error:
-    hlogw("connfd=%d connect error: %s:%d\n", io->fd, socket_strerror(io->error), io->error);
+    hlogw("connfd=%d connect error: %s:%d", io->fd, socket_strerror(io->error), io->error);
     hio_close(io);
 }
 

+ 7 - 3
evpp/TcpClient.h

@@ -63,8 +63,12 @@ public:
     // closesocket thread-safe
     void closesocket() {
         if (channel) {
-            setReconnect(NULL);
-            channel->close(true);
+            loop_->runInLoop([this](){
+                if (channel) {
+                    setReconnect(NULL);
+                    channel->close();
+                }
+            });
         }
     }
 
@@ -134,8 +138,8 @@ public:
         if (!reconn_setting) return -1;
         if (!reconn_setting_can_retry(reconn_setting)) return -2;
         uint32_t delay = reconn_setting_calc_delay(reconn_setting);
+        hlogi("reconnect... cnt=%d, delay=%d", reconn_setting->cur_retry_cnt, reconn_setting->cur_delay);
         loop_->setTimeout(delay, [this](TimerID timerID){
-            hlogi("reconnect... cnt=%d, delay=%d", reconn_setting->cur_retry_cnt, reconn_setting->cur_delay);
             startConnect();
         });
         return 0;