Socket의 Connect() 메서드는 네트워크 연결을 시도하는 메서드이다.
만약 연결을 요청했을 때 연결이 되거나, 연결이 거부되거나 처럼 응답이 오면 빠르게 넘어갈 수 있으나, 문제는 응답이 없는 경우이다. 응답이 없는 경우 10초 내지 20초의 꽤 긴 시간 동안 응답을 기다리다가 처리가 넘어가게 된다.
연결을 요청하는 측에서도 타임아웃을 두고 지정된 시간동안만 대기하는 코드를 소개한다.
public bool ConnectWithTimeout(Socket socket, string ip, int port, int timeOutSec)
{
var waiter = socket.BeginConnect(new IPEndPoint(IPAddress.Parse(ip), port), null, null);
// WaitOne()의 첫 번째 인수는 대기할 시간을 ms(밀리초) 단위로 넣는다. (1초 = 1000ms)
if(waiter.AsyncWaitHandle.WaitOne(timeOutSec * 1000, true))
{
socket.EndConnect(waiter);
if(socket.Connected) return true;
else return false;
}
else
{
socket.Close();
return false;
}
}
위 메서드의 첫 번째 매개변수로 연결할 소켓을, 그리고 IP, Port 및 대기할 시간(초)을 넣어 호출한다.
ConnectWithTimeout()이 true를 반환하면 연결 성공, false를 반환하면 연결에 실패한 것이다.
'.NET > C#' 카테고리의 다른 글
[C#] using 구문 사용법 (0) | 2021.07.23 |
---|---|
[C#] delegate와 delegate 체인 (0) | 2021.07.20 |
[C#] as, is 키워드 사용법 (0) | 2021.07.14 |
[C#] 문자열 보간 기능 (0) | 2021.07.14 |
[C#] 확장 메서드를 사용해 메서드 호출을 간결하게 하기 (0) | 2021.07.09 |