리눅스 네트워크 프로그래밍시 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:


댓글 달기