在.NET中将套接字发送/接收超时设置为小于500毫秒

don*_*asm 7 .net c# sockets

根据MSDN文档,无法将Socket.SendTimeout设置为小于500毫秒的值:http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendtimeout相同的规则适用于Socket.ReceiveTimeout(即使它没有在MSDN文档中提到,这是真的,因为两个案例都进行了实际测试).

有没有其他方法可以超时套接字接收操作,例如,如果它需要超过10毫秒才能完成?

use*_*819 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
}
Run Code Online (Sandbox Code Playgroud)

你也可以使用Select(),BeginReceive()ReceiveAsync()用于其他类型的行为.

我建议您阅读Stevens的UNIX网络编程第6章和第16章,以获得有关非阻塞套接字使用情况的更深入信息.尽管本书的名称中包含UNIX,但整体套接字体系结构在UNIX和Windows(和.net)中基本相同.