在为套接字编程时,我对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。还是有别的办法来解决这个问题呢?
发布于 2016-05-17 09:02:41
(1)是否再次设置套接字选项,删除已设置的重用地址选项?
不是的。每个套接字选项都是独立的。
(2)关闭和重新开放港口是否立即造成问题?
不,除非最近至少有一个与该端口的TCP连接。
(3)如果关闭和重新打开端口立即导致问题,那么可以避免在套接字选项中使用SO_REUSEPORT/SO_REUSEADDR。因为它克服了由TCP协议设置的time_wait。还是有别的办法来解决这个问题呢?
对time_wait无影响。它只会让你立即重新打开港口。现有的连接不受影响,并且继续正常超时,只是不能阻止您重新打开端口。
https://stackoverflow.com/questions/37271517
复制相似问题