根据MSDN文档,无法将Socket.SendTimeout设置为小于500毫秒的值:http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendtimeout相同的规则适用于Socket.ReceiveTimeout(即使它没有在MSDN文档中提到,这是真的,因为两个案例都进行了实际测试).
有没有其他方法可以超时套接字接收操作,例如,如果它需要超过10毫秒才能完成?
简单的答案是"你没有".
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
}
Run Code Online (Sandbox Code Playgroud)
你也可以使用Select(),BeginReceive()或ReceiveAsync()用于其他类型的行为.
我建议您阅读Stevens的UNIX网络编程第6章和第16章,以获得有关非阻塞套接字使用情况的更深入信息.尽管本书的名称中包含UNIX,但整体套接字体系结构在UNIX和Windows(和.net)中基本相同.
| 归档时间: |
|
| 查看次数: |
11394 次 |
| 最近记录: |