리눅스 네트워크 프로그래밍시 connect 이후 EINPROGRESS일 때 자기자신을 호출하는 경우

ckyh585의 이미지

처음 글을 올려봅니다.

네트워크 프로그래밍 초보 개발자인데요

이 문제 때문에 계속 고생입니다.

connect이후 return 값이 EINPROGRESS일때

select를 이용해서

    ...    
 
    FD_ZERO(&rset);     
    FD_SET(fd, &rset);  
    wset = rset;    
    tval.tv_sec= 0; 
    tval.tv_usec= 0; 
    error = 0;      
 
    rt = select( fd+1, &rset, &wset, NULL, &tval );
    if( rt <= 0 )   
    {           
        if( rt < 0 )
           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 )    
        {
            close(fd);
            return -1;
        }
    }
    else
    {
        close(fd);
        return -1;
    }
 
    if( error )
    {
        close(fd);
        return -1;
    }
 
    flags = fcntl( fd, F_GETFL, 0 );
    fcntl( fd, F_SETFL, flags & ~O_NONBLOCK);
 
...

이런식으로 구현을 했습니다. 그런데 이 프로그램이 이상한게 getsockopt()에서 error을 0이 아닌 수로 계속 return을 하다가 가끔가다가 getsockopt에서 error을 0으로 return을 할 때가 있습니다. connect연결이 되지 않았는데도요. 이런 경우가 있는 분들 있으신가요??

있으면 조언좀부탁 드립니다.