-
SO_REUSEADDR
一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。
SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态int reuse = 1; int rc = setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(const void*)&reuse,sizeof(reuse)); if( rc == -1 ) printf("can not set SO_REUSEADDR\n");
-
SO_REUSEPORT
是网络的一个选项设置,它允许多个进程/线程 bind/listen 相同的 IP/PORT,在 TCP 的应用中,它是一个新连接分发的负载均衡功能,它提升了新连接的分配性能(针对 accept )
int reuse = 1; int rc = setsockopt(sock,SOL_SOCKET,SO_REUSEPORT,(const void*)&reuse,sizeof(reuse)); if( rc == -1 ) printf("can not set SO_REUSEPORT\n");