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

问题描述 投票:0回答:1

我有一个UdpClient接收设置了超时的数据,例如:

UdpClient client = new UdpClient(12345);
client.Client.ReceiveTimeout = 5000;     // 5 second timeout

while (!shutdown) {
    IPEndPoint source = null;
    byte[] data = client.Receive(ref source);  
}

Receivedocumented,如果“访问套接字时发生错误”,则抛出SocketException。如果同步操作超时,则设置ReceiveTimeout的行为也将是documented,即抛出SocketException

如果在设置超时时从SocketException获得Receive,我如何确定异常是否是由于超时而不是更严重的错误引起的?

我确实确认超时引发的异常是实际的SocketException,而不是它的某些特定子类。我真正想到的唯一一件事就是检查异常消息,这是我并不十分兴奋的hack。

c# socketexception udpclient
1个回答
0
投票

您需要检查SocketException.ErrorCode属性的值10060WSATIMEDOUT)。

ErrorCode值的完整列表,您可以在这里找到:https://docs.microsoft.com/windows/win32/winsock/windows-sockets-error-codes-2

© www.soinside.com 2019 - 2024. All rights reserved.