繁体   English   中英

确定 UdpClient.Receive 中的 SocketException 是否由超时引起

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM