내용 보기
작성자
관리자 (IP : 172.17.0.1)
날짜
2020-07-10 04:47
제목
[C#] 소켓 연결 시간 제한
소켓 연결 시간 제한
public bool TryConnect(string targetAddress, int connectTimeout) { Ping ping = new Ping(); try { PingReply reply = ping.Send(targetAddress, connectTimeout); return (reply.Status == IPStatus.Success); } catch (Exception) { } return false; }
How to shorten socket.connect() timeout ?? ; http://forums.asp.net/p/1138952/1826854.aspx
public static Socket ConnectToserver(IPEndPoint endPoint, int port, int timeoutMs) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { // do not block - do not want to be forced to wait on (too- long) timeout socket.Blocking = false; // initiate connection - will cause exception because we're not blocking socket.Connect(endPoint); return socket; } catch (SocketException socketException) { // check if this exception is for the expected 'Would Block' error if (socketException.ErrorCode != 10035) { socket.Close(); // the error is not 'Would Block', so propogate the exception throw; } // if we get here, the error is 'Would Block' so just continue execution } // wait until connected or we timeout int timeoutMicroseconds = timeoutMs * 1000; if (socket.Poll(timeoutMicroseconds, SelectMode.SelectWrite) == false) { // timed out socket.Close(); throw new Exception("The host failed to connect"); } // *** AT THIS POINT socket.Connected SHOULD EQUAL TRUE BUT IS FALSE! ARGH! // set socket back to blocking socket.Blocking = true; return socket; } } |
출처1
출처2