리눅스 네트워크 프로그래밍시 connect 이후 EINPROGRESS일 때 자기자신을 호출하는 경우
글쓴이: ckyh585 / 작성시간: 목, 2012/03/08 - 11:14오전
처음 글을 올려봅니다.
네트워크 프로그래밍 초보 개발자인데요
이 문제 때문에 계속 고생입니다.
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연결이 되지 않았는데도요. 이런 경우가 있는 분들 있으신가요??
있으면 조언좀부탁 드립니다.
Forums:
댓글 달기