如何中断Socket.Select

时间:2014-10-10 00:33:07

标签: c# sockets tcp

如何在c#中断Socket.Select?

在C中,我使用了#34; self pipe"技巧或"信号"。

在C#中我知道我可以创建一个套接字对并中断选择,但它看起来不是很干净。

我可以做些什么来打断c#中的select调用。

4 个答案:

答案 0 :(得分:0)

您是否尝试过使用Socket Shutdown?

http://msdn.microsoft.com/en-us/library/system.net.sockets.socketshutdown(v=vs.110).aspx

socket.Shutdown(SocketShutdown.Both);

希望这可以帮到你。

答案 1 :(得分:0)

为了解决这个问题,我只是在我Socket.Close()电话中列出的套接字上调用Socket.Select()。这会中断选择,但会有例外。

我会使用套接字对技巧,但我在.net中找不到等同于pipe()的技巧。我有一种感觉,我在某处读到在Windows上执行此操作的方法是通过TCP连接到环回(特别是因为WSA的select()不支持“正常”文件描述符)。但这似乎更脏,更容易发生坏事,而不仅仅是从另一个线程关闭监听套接字并使Socket.Select()被异常中断。

答案 2 :(得分:0)

我遇到了同样的问题。最好的选择是在不同的线程上运行select。

这帮助我摆脱了异常错误。

答案 3 :(得分:-2)

您是否尝试过使用Select函数的最后一个参数(int microSeconds)。它作为超时服务器(-1 =无超时)。