我有一个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
也记录为抛出a SocketException
。
如果我SocketException
从Receive
设置超时的时候得到一个信息,我如何确定该异常是否是由于超时而不是更严重的错误引起的?
我确实确认了超时引发的异常是实际的,SocketException
而不是它的某些特定子类。我唯一能想到的就是检查异常消息,这是我并不十分兴奋的hack。
您需要检查SocketException.ErrorCode
属性的值10060
(WSATIMEDOUT
)。
ErrorCode
您可以在这里找到值的完整列表:https : //docs.microsoft.com/windows/win32/winsock/windows-sockets-error-codes-2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句