문제점
아래처럼 소켓의 Connect 메소드를 사용할 경우 서버가 접속불가능한 상태에서는 Timeout 시간이 너무 길다.
m_clientSocket.Connect(ipEnd);
해결방법
public static class SocketExtensions
{
/// <summary>
/// Connects the specified socket.
/// </summary>
/// <param name="socket">The socket.</param>
/// <param name="endpoint">The IP endpoint.</param>
/// <param name="timeout">The timeout.</param>
public static void Connect(this Socket socket, EndPoint endpoint, TimeSpan timeout)
{
var result = socket.BeginConnect(endpoint, null, null);
bool success = result.AsyncWaitHandle.WaitOne(timeout, true);
if (success)
{
socket.EndConnect(result);
}
else
{
socket.Close();
throw new SocketException(10060); // Connection timed out.
}
}
}
참조
http://stackoverflow.com/questions/1062035/how-to-configure-socket-connect-timeout
'닷넷 프레임워크' 카테고리의 다른 글
스레드가 실행 중이거나 종료되었습니다. 다시 시작할 수 없습니다. (0) | 2015.02.04 |
---|---|
Windows7 64비트에서 MS Access MDB파일용 ODBC 드라이버 사용하기 (0) | 2011.04.20 |
메타데이터 (0) | 2010.12.13 |
프로그램 중복 실행 금지 (0) | 2010.11.22 |
C#에서 실행 경로(또는 현재 경로)를 알아내는 방법 (0) | 2010.11.08 |