non-block tcp 연결에서 errno 110 connection timed out이 발생하는 이유를 알고 싶습니다.
글쓴이: faraplay / 작성시간: 목, 2014/03/13 - 11:00오전
안녕하세요 구글 검색을 해도 이유를 찾지 못해 글을 남겨 봅니다.. ㅠㅠ
client에서 tcp non-block 모드로 socket을 열고 connection 시도 시에 connection timed out이 발생합니다.
보통 연결이 안되면 errno 111 connection refused (SEVER가 실행이 안되어 있는 경우) 가 출력 되는걸로 아는데 connection timed out이 왜 발생하는 걸까요??
다음 소스는 connection시도이후 EINPROGRESS 를 리턴 받은 이 후 select()로 부분 구현 입니다.
rt = select( fd+1, &rset, &wset, NULL, &tval );
if( rt <= 0 )
{
if( rt < 0 )
printf( "(%d) = select, errno(%d)", rt, errno);
else
printf( "(%d) = select", rt);
close(fd);
return -1;
}
if( FD_ISSET(fd, &rset) || FD_ISSET(fd, &wset) )
{
len = sizeof(error);
rt = getsockopt( fd, SOL_SOCKET, SO_ERROR, &error, &len) ;
if( rt < 0 )
{
printf( "(%d)=getsockopt, error(%d), len(%d), errno(%d)", rt, error, len, errno);
close(fd);
return -1;
}
}
else
{
printf( "Not connected");
close(fd);
return -1;
}
if( error )
{
printf( "fd(%d), error(%d)",fd, error);
close(fd);
return -1;
}이 코드에서 select 이후 에러 검사하는 제일 마지막 부분
if( error )
{
printf( "fd(%d), error(%d)",fd, error);
close(fd);
return -1;
}여기서 error 부분이 110으로 출력이 됩니다. 보통 server가 실행이 안될때는 111로 출력이 되고요.
혹시 여기서 110으로 출력되는 이유를 아시는 분이 계신가요??
Forums:


댓글 달기