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:
댓글 달기