根据 MSDN 文档,不可能将 Socket.SendTimeout 设置为小于 500ms 的值:http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendtimeout http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendtimeout同样的规则对于 Socket.ReceiveTimeout 也是有效的(即使 MSDN 文档中没有提到,这是事实,因为这两种情况都经过了实际测试)。
例如,如果套接字接收操作需要超过 10 毫秒才能完成,是否有其他方法可以使该操作超时?
简单的答案是“你不”。
Send()
and 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()
or ReceiveAsync()
对于其他类型的行为。
我建议您阅读 Stevens 的《UNIX 网络编程》第 6 章和第 16 章,以获取有关非阻塞套接字使用的更多深入信息。尽管本书的名称中包含 UNIX,但 UNIX 和 Windows(和 .net)中的整体套接字架构本质上是相同的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)