根据MSDN文档,无法将Socket.SendTimeout设置为小于500毫秒的值:http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendtimeout同样的规则对Socket.ReceiveTimeout有效(即使在MSDN文档中没有提及,这是真的,因为两个案例都进行了实际测试。)
是否有任何其他方法可以超时套接字接收操作(例如,完成时间超过10毫秒)?
答案 0 :(得分:9)
简单的答案是“你没有”。
Send()
和Receive()
调用会阻止程序流,直到发送,接收数据或发生错误为止。
如果您希望对呼叫有更多控制权,可以使用多种机制。最简单的方法是使用Poll()
。
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
}
您还可以将Select()
,BeginReceive()
或ReceiveAsync()
用于其他类型的行为。
我建议您阅读Stevens的UNIX网络编程第6章和第16章,以获取有关非阻塞套接字使用情况的更深入信息。尽管本书的名称中包含UNIX,但整体套接字体系结构在UNIX和Windows(和.net)中基本相同