Swa*_*aur 7 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) { }
Run Code Online (Sandbox Code Playgroud)
您可以在任何超时期间同步轮询套接字.如果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
}
Run Code Online (Sandbox Code Playgroud)
我建议您阅读Stevens的UNIX网络编程第6章和第16章,以获得有关非阻塞套接字使用情况的更深入信息.尽管本书的名称中包含UNIX,但整体套接字体系结构在UNIX和Windows(和.net)中基本相同.
小智 0
我找到了这个:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IAsyncResult result = socket.BeginConnect( sIP, iPort, null, null );
bool success = result.AsyncWaitHandle.WaitOne( 40, true );
if ( !success )
{
socket.Close();
throw new ApplicationException("Failed to connect server.");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18938 次 |
| 最近记录: |