Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, timeout);
如果将超时设置为-1,则该方法在Windows上可以正常运行,但在Linux和Mac上会失败,但以下情况除外
System.Net.Sockets.SocketException(22):处的无效参数 System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError 错误,字符串callerName)在 System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel,SocketOptionName optionName,Int32 optionValue,布尔值 静默)在System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel,SocketOptionName optionName,Int32 optionValue)
如果在Mac和Linux上将超时设置为0,则没有例外。
1)如果超时设置为-1,则会在Windows上进行不确定的轮询。在Windows上timeout = 0会做同样的事情吗?
2)在Linux上,如果超时设置为0?它会进行不确定的轮询吗?
当我使用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)
答案 0 :(得分:1)
1)如果超时设置为-1,则会在Windows上进行不确定的轮询。将 timeout = 0是否在Windows上也一样?
2)在Linux上,如果超时设置为0?它会进行不确定的轮询吗?
是的,根据Socket.RecieveTimeout的文档,值0和-1都具有相同的行为
超时值,以毫秒为单位。默认值为0,即 表示无限的超时期限。指定-1还表示 无限超时期限。