c# - 套接字接收超时

标签 c# sockets timeout

我已将 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/

相关文章:

c# - 如何使用 C# 检测连接到我的机器的相机

Python ftplib : socket. gaierror: [Errno -3] 名称解析暂时失败

Java套接字使用wireshark获取数据包

java - 在java中使用套接字在单个文件中的客户端和服务器

python-3.x - 设置 Nginx 超时和默认 JSON 响应

javascript - AngularJS:超时 promise 调用

python - 一定时间后继续 for 循环

c# - Web Api - 具有复杂类型的 IEnumerable,因为参数为空

c# - 将 "if"语句条件移动到局部变量会使 C# 编译器不满意

c# - SignalR : notifying progress of lengthy operation from ASP. NET Core Web API 到 Angular 7 客户端