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: 


댓글 달기