connect와 select관련하여 질문드립니다.
글쓴이: webispy / 작성시간: 화, 2005/12/13 - 12:22오전
안녕하세요.
작업을 하다 의문점이 있어서 질문 올립니다.
- 서버는 클라이언트가 접속하면 "OK"메시지를 보냅니다.
클라이언트에서
connect()
recv()
이렇게 하면 OK라는 메시지를 제대로 받아옵니다.
그런데,
connect()
select() - 들어온 메시지가 있는지 readfds검사
recv()
이렇게 하면 지연이 된 후에 OK라는 메시지를 받아옵니다.
제가 이것저것 삽질해보니,
connect가 되면 writefds로 감지가 됩니다.
그 다음에 서버에서 보낸 OK메시지가 있기 때문에
readfds에도 감지가 되야 하는데
그 writefds와 readfds의 감지 텀이 조금 깁니다.
왜 이런 지연이 발생하게 되는건지 원인을 알고 싶습니다.
해결방법도 함께요.
Forums:
초기 socket() 생성후에 [b]fcntl(sockfd, F_SETF
초기 socket() 생성후에 fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFL, 0) | O_NONBLOCK);을 해보세요.
만약 이 내용이 맞다면 google신에게 nagle을 문의하시구요.
-----[꼬릿말 절취선 시작]-----
삽질전에 먼저 구글신께 기도하자.
-----[꼬릿말 절취선 끝]-----
연결을 요청하는 클라이언트에서 select를 사용하시는 건가요? 제가 보
연결을 요청하는 클라이언트에서 select를 사용하시는 건가요? 제가 보기엔 지금 클라이언트의 경우에는 select를 쓸 필요 없을것 같은데요.
connect 하시고 성공하면 recv에서 기다리십시오.
서버쪽은 여러 클라이언트가 접속을 하니 select를 쓰시는것도 괜찮을거라 생각됩니다.
/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/
댓글 달기