我選擇不使用異步調用,因爲它需要回調,我只是好奇,是否有辦法通過利用解決這個類似於Unix的非阻塞套接字方法:Poll(),Asyn是專門爲Windows環境創建的。我正在研究這是否可以在沒有異步的情況下完成。C#非阻塞Socket.Connect()
需要說明的是:無阻塞=異步 :)
因此,我已通過關閉插座的阻斷標誌& poll()方法以下方法:
try
{
IPEndPoint hostEp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000);
Socket hostSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
hostSock.Blocking = false;
hostSock.Connect(hostEp);
}
catch (Win32Exception se)
{
if (ex.ErrorCode == 10035) // WSAEWOULDBLOCK is expected, means connect is in progress
while (true)
{
Console.WriteLine("Connecting in progress");
bool connected = hostSock.Poll(1000000, SelectMode.SelectWrite);
if (connected)
{
Console.WriteLine("Connected");
break;
}
}
}
但那麼SelectMode.SelectWrite似乎不會爲我重新嘗試連接嘗試。所以有什麼問題?我怎麼能解決這個問題?我應該使用Select() instead of Poll()?
僅限使用選擇是否在同一時間在多個套接字上接收。 – Slugart