如何在c#中断Socket.Select?
在C中,我使用了#34; self pipe"技巧或"信号"。
在C#中我知道我可以创建一个套接字对并中断选择,但它看起来不是很干净。
我可以做些什么来打断c#中的select调用。
答案 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 =无超时)。