我有一个UdpClient
接收设置了超时的数据,例如:
UdpClient client = new UdpClient(12345);
client.Client.ReceiveTimeout = 5000; // 5 second timeout
while (!shutdown) {
IPEndPoint source = null;
byte[] data = client.Receive(ref source);
}
Receive
是documented,如果“访问套接字时发生错误”,则抛出SocketException
。如果同步操作超时,则设置ReceiveTimeout
的行为也将是documented,即抛出SocketException
。
如果在设置超时时从SocketException
获得Receive
,我如何确定异常是否是由于超时而不是更严重的错误引起的?
我确实确认超时引发的异常是实际的SocketException
,而不是它的某些特定子类。我真正想到的唯一一件事就是检查异常消息,这是我并不十分兴奋的hack。
您需要检查SocketException.ErrorCode
属性的值10060
(WSATIMEDOUT
)。
ErrorCode
值的完整列表,您可以在这里找到:https://docs.microsoft.com/windows/win32/winsock/windows-sockets-error-codes-2