Parcourir la source

setsockopt SO_REUSEADDR

ithewei il y a 4 ans
Parent
commit
04e285c778
1 fichiers modifiés avec 9 ajouts et 0 suppressions
  1. 9 0
      event/hloop.c

+ 9 - 0
event/hloop.c

@@ -832,6 +832,15 @@ hio_t* hio_create_socket(hloop_t* loop, const char* host, int port, hio_type_e t
     }
     hio_t* io = NULL;
     if (side == HIO_SERVER_SIDE) {
+#ifdef SO_REUSEADDR
+        // NOTE: SO_REUSEADDR allow to reuse sockaddr of TIME_WAIT status
+        int reuseaddr = 1;
+        if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&reuseaddr, sizeof(int)) < 0) {
+            perror("setsockopt");
+            closesocket(sockfd);
+            return NULL;
+        }
+#endif
         if (bind(sockfd, &addr.sa, sockaddr_len(&addr)) < 0) {
             perror("bind");
             closesocket(sockfd);