sockets - 立即关闭和重新开放港口

标签 sockets tcp

在为套接字编程时,我遇到了对 使用的疑问。 setsocketopt() .如果我们提供

setsockopt( socket_no, SOL_SOCKET,SO_REUSEADDR , (char *) &optval, (socklength) sizeof( optval ) );//To reuse addr

其次是同一个套接字的另一个套接字选项,
setsockopt( socket_no, IPPROTO_IPV6,IPV6_V6ONLY , (char *) &optval, (socklength) sizeof( optval ) );//To use only IPv6

(1)是否重新设置socket选项,去掉已经设置的reuse address选项?

在少数情况下,需要立即关闭并重新打开静态端口,不要有任何延迟。

(2)立即关闭和重新打开一个端口会导致问题吗?

(3)如果立即关闭和重新打开一个端口会导致问题,是否可以在套接字选项中使用 SO_REUSEPORT/SO_REUSEADDR 来避免。因为它克服了 TCP 协议(protocol)设置的 time_wait。还是有一些替代方法可以克服这个问题?

最佳答案

(1)Does setting socket option again, removes the reuse address option which is set already ?



不,每个套接字选项都是独立的。

(2)Does closing and reopening a port immediately causes problem ?



不,除非最近至少有一个 TCP 连接进出该端口。

(3)If closing and reopening a port immediately causes problem, can it be avoided using SO_REUSEPORT/SO_REUSEADDR in socket option. As it overcomes time_wait set by TCP protocol. Or is there some alternative to overcome this problem ?



它对 time_wait 没有影响。它只是让您立即重新打开端口。现有连接不受影响并继续正常超时,它只是不会阻止您重新打开端口。

关于sockets - 立即关闭和重新开放港口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37271517/

相关文章:

c - 当计算机连接到互联网路由器时,常见的网络应用程序(使用unix套接字API)如何完成转发其端口?

c - Linux下C语言生成Socket及wireshark检测frame错误

tcp - 端口重定向不适用于 IPtables

sockets - 在多个IP地址中使用wireshark监控tcp数据包分段和数据包重传

java - 在同一端口上监听 TCP 和 UDP 请求

Android Wi-Fi Direct P2P 从服务器向客户端发送数据

c++ - 如何使用带套接字的重叠 I/O?

java - 服务器启动客户端?

java - 使用多线程代码防止DOS攻击

C 线程套接字 - 带有 TLS 的 tcp,无法获取 ip/ether 数据包 header