我已将 ReceiveTimout
指定为 40 毫秒。但是接收超时需要超过500ms。我正在使用秒表来计算所用时间。
代码如下所示。
Socket TCPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
TCPSocket.ReceiveTimeout = 40;
try
{
TCPSocket.Receive(Buffer);
} catch(SocketException e) { }
最佳答案
您可以根据需要在套接字上同步轮询任何超时时间。如果 Poll()
返回 true
,您可以确定可以调用不会阻塞的 Receive()
。
Socket s;
// ...
// Poll the socket for reception with a 10 ms timeout.
if (s.Poll(10000, SelectMode.SelectRead))
{
s.Receive(); // This call will not block
}
else
{
// Timed out
}
我建议您阅读 Stevens 的 UNIX 网络编程第 6 章和第 16 章,以获取有关非阻塞套接字用法的更深入的信息。尽管这本书的名字中有 UNIX,但总体套接字体系结构在 UNIX 和 Windows(和 .net)中基本相同
关于c# - 套接字接收超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9327326/