c# - Socket.SetSocketOption 在 Mac OS 和 Linux 上抛出无效参数异常,但在 Windows 上工作正常
问题描述
Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, timeout);
如果超时设置为 -1,则该方法在 Windows 上运行良好,但在 Linux 和 Mac 上失败,并出现以下异常
System.Net.Sockets.SocketException (22): System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, Int32 optionValue, System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, Int32 optionValue)布尔静默)在 System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, Int32 optionValue)
如果在 mac 和 linux 上 timeout 设置为 0,也不例外。
1) 如果超时设置为 -1,它会在 Windows 上进行无限期轮询。timeout=0 会在 Windows 上做同样的事情吗?
2)如果超时设置为0,则在Linux上?它会进行无限期的民意调查吗?
当我使用 0 超时时,应用程序会间歇性地失败
System.NotSupportedException: The BeginWrite method cannot be called >when another write operation is pending. at System.Net.Security._SslStream.ProcessWrite(Byte[] buffer, >Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security._SslStream.BeginWrite(Byte[] buffer, Int32 >offset, Int32 count, AsyncCallback asyncCallback, Object asyncState)
解决方案
1) 如果超时设置为 -1,它会在 Windows 上进行无限期轮询。timeout=0 会在 Windows 上做同样的事情吗?
2)如果超时设置为0,则在Linux上?它会进行无限期的民意调查吗?
是的,根据Socket.RecieveTimeout的文档,0 和 -1 的值都具有相同的行为
超时值,以毫秒为单位。默认值为 0,表示无限超时。指定 -1 还表示无限超时。
推荐阅读
- firebase - 使用 fcm 通知唤醒本机应用程序
- python - 需要帮助计算稀疏矩阵的余弦相似度
- python - 如何在 Python 中的每个循环后打印一个递增的数字?
- angular - 导航到 Angular 中**不同**(不相同)页面/组件的片段
- css - 寡妇调整大小时如何删除CSSTransition
- wordpress - 我可以使用什么服务来为多个客户托管多个 wordpress 网站
- java - 控制台中的 Java 致命
- javascript - jsdom 中加载的谷歌地图缺少地图图块和控件
- maven - 钩子前失败:BaseSteps.setUp() 消息:java.lang.NoSuchMethodError
- java - 如何在不自动创建表的情况下生成实体类