我试图在连接的套接字上设置“保持活动时间”,并获得以下异常
System.Net.Sockets.SocketException (10042): An unknown, invalid, or unsupported option or level was specified in a getsockopt or setsockopt call.
at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)
at System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, Int32 optionValue)
at System.Net.Sockets.SocketExtensions.SetKeepAlive(Socket socket, Boolean keepAlive, Int32 keepAliveTime, Int32 keepAliveInterval, Int32 keepAliveRetryCount)
at ServerService.Service.OnManagerConnection(IConnection sender, Socket socket)
这是正在被调用的代码
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveTime, 1);
socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveInterval, 1);
socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveRetryCount, 5);
异常仅在Windows 2016上抛出,相同的代码在其他Windows版本和linux上运行。
希望有人能找出问题所在。
发布于 2022-08-09 15:47:27
其中两个选项在Windows1709之前不受支持,即TcpKeepAliveTime
和TcpKeepAliveInterval
。TcpKeepAliveRetryCount
从1703年开始才开始使用。Windows Server 2016相当于Windows 10版本1607。
Winsock文档在TCP_KEEPIDLE
和TCP_KEEPINTVL
选项下说:
“此选项可从Windows 10版本1709开始使用。”
对于TCP_KEEPCNT
,它说:
从Windows 10开始,版本1703
因此,您只需使用try
catch
,因为似乎无法检查受支持的选项。
https://stackoverflow.com/questions/73294345
复制相似问题