コールバックが必要なため、非同期呼び出しを使用しないことを選択します。AsynはWindows環境用に特別に作成されているため、 Unixに似たノンブロッキングソケットメソッドPoll()を使用してこれを解決する方法があるかどうかだけ知りたいです。 。これが非同期なしで実行できるかどうかを調査しています。
注意すべき点:ノンブロッキング!=非同期:)
したがって、socket&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は、接続の試行を再開しないようです。だから問題は何ですか?そして、どうすればこれを解決できますか?Poll()の代わりにSelect()を使用する必要がありますか?