[英]Determine if SocketException from UdpClient.Receive was caused by a timeout
我有一个UdpClient
接收带有超时设置的数据,例如:
UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, 12345));
client.Client.ReceiveTimeout = 5000; // 5 second timeout
while (!shutdown) {
IPEndPoint source = null;
byte[] data = client.Receive(ref source);
}
如果“访问套接字时发生错误”,则Receive
记录为抛出SocketException
。 如果同步操作超时,则设置ReceiveTimeout
的行为也记录为抛出SocketException
。
如果在设置超时时从Receive
SocketException
,我如何确定异常是否是由超时而不是更严重的错误引起的?
我确实确认超时抛出的异常是实际的SocketException
而不是它的某些特定子类。 我真正能想到的唯一一件事就是检查异常消息,这是一个我并不真正感到兴奋的黑客。
您需要检查SocketException.ErrorCode
属性的值10060
( WSATIMEDOUT
)。
的完整列表, ErrorCode
值,您可以在这里找到: https://docs.microsoft.com/windows/win32/winsock/windows-sockets-error-codes-2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.