콜백이 필요하기 때문에 비동기 호출을 사용하지 않기로 결정했습니다.이를 활용하여이를 해결할 방법이 있는지 궁금합니다. 유닉스 계열의 비 블로킹 소켓 메소드 : Poll(), Asyn은 Windows 환경을 위해 특별히 제작되었습니다. 비동기없이이 작업을 수행 할 수 있는지 조사하고 있습니다.C# 비 블로킹 Socket.Connect()
가 주목해야! 비 블로킹 = 비동기 따라서 :
나는이 소켓의 & 설문 조사() 메소드를 차단 플래그를 해제하여 다음과 같은 방법 :
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는 나를 위해 연결 시도 reinitiates 것 같습니다. 그래서, 무엇이 문제입니까? 어떻게 해결할 수 있을까요? 내가 사용해야 할 것 Select() instead of Poll()?
전용 여러 소켓을 동시에 수신하는 경우 선택하십시오. – Slugart