立即关闭并重新打开端口

时间:2016-05-17 08:57:16

标签: 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)是否再次设置套接字选项,删除已设置的重用地址选项?

在少数情况下,需要立即关闭并重新打开静态端口。

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

(3)如果关闭并重新打开端口会立即导致问题,可以使用套接字选项中的SO_REUSEPORT / SO_REUSEADDR来避免。因为它克服了TCP协议设置的time_wait。或者有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

  

(1)是否再次设置套接字选项,删除已设置的重用地址选项?

没有。每个套接字选项都是独立的。

  

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

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

  

(3)如果关闭并重新打开端口会立即导致问题,可以使用套接字选项中的SO_REUSEPORT / SO_REUSEADDR来避免。因为它克服了TCP协议设置的time_wait。或者有其他方法可以解决这个问题吗?

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

相关问题