首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在windows服务器上设置“保持活动”2016引发WSAENOPROTOOPT (10042)错误

在windows服务器上设置“保持活动”2016引发WSAENOPROTOOPT (10042)错误
EN

Stack Overflow用户
提问于 2022-08-09 15:26:33
回答 1查看 134关注 0票数 0

我试图在连接的套接字上设置“保持活动时间”,并获得以下异常

代码语言:javascript
运行
复制
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)

这是正在被调用的代码

代码语言:javascript
运行
复制
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上运行。

希望有人能找出问题所在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-09 15:47:27

其中两个选项在Windows1709之前不受支持,即TcpKeepAliveTimeTcpKeepAliveIntervalTcpKeepAliveRetryCount从1703年开始才开始使用。Windows Server 2016相当于Windows 10版本1607。

Winsock文档TCP_KEEPIDLETCP_KEEPINTVL选项下说:

“此选项可从Windows 10版本1709开始使用。”

对于TCP_KEEPCNT,它说:

从Windows 10开始,版本1703

因此,您只需使用try catch,因为似乎无法检查受支持的选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73294345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档