non_blocking 소켓의 connect()에 대한 개념적인 질문입니다.
글쓴이: kernelbomb / 작성시간: 화, 2004/06/22 - 1:21오후
안녕하세요? unp를 보고 공부하고 있는데요.
non_blocking 소켓을 만들고 connect(); 호출 시,
바로 리턴이 되는데, 나중에 연결설정(3WH)이 되면
getsockopt로 완전히 이루어 졌는지 알 수 있다고 나오는데요.
UNP의 p412를 보면 지정번호가 읽기가능이나 또는 쓰기가능하면
소켓의 미결정 오류(SO_ERROR)를 가져오기 위해서 getsockopt를
호출한다라고 나오는데요. 이부분이 이해가 가지 않습니다.
getsockopt를 호출하게 됐을 때, 어떻게 해서 connect()가
완전하게 이루어 졌는지 이해해야 하는건지요?
또한 미결정 오류라는것이 어떤 오류를 말하는 것인지요?
Forums:
관련 부분을 영문으로 한번 봐 보시죠...아니면.. 이 게시판을 좀
관련 부분을 영문으로 한번 봐 보시죠...
아니면.. 이 게시판을 좀 더 뒤져 보심이.. :)
그건요.....
넌블락 모드로 connect 를 하게 되면 바로 리턴을 하게 됩니다.
퍼포먼스를 위해 넌블락을 사용하는 경우가 많이 있는데 넌블락으로 connect를 호출하게 되면 connect가 이루어졌는지 상관없이 바로 리턴을 하게되는데
이 개념은 connect를 호출 하고 나서 connect가 이루어졌는지 나중에 확인하겠다는 의미입니다.
넌블락모드 소켓 생성...
connect 호출을 한후에
예를 들어 is_connect()라는 함수를 만들어서 connect가 됐는지 확인을 하는것입니다.
connect를 호출후 바로 리턴하기때문에 당연히 퍼포먼스의 효과가 있겠죠...
대신 블락모드에 비해 복잡해진다는 단점이 있습니다.
어느것을 쓰실지는 개발자의 결정이겠죠......
/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/
댓글 달기