recv() 에서 블럭킹 관련 질문
글쓴이: lovejin0309 / 작성시간: 화, 2006/04/04 - 4:15오후
소켓 프로그래밍을 짜고 있습니다.
다음과 같은 형태로 recv() 함수를 사용하고 있습니다.
error = recv(SockFD, message, MSG_LEN, MSG_NOSIGNAL);
위와 같이 recv() 함수를 불렀는데, 만약에 소켓에 수신된 데이터가 없으면 얼마간을 대기 했다가 recv() 함수를 종료하게 됩니다.
제가 원하는 것은 recv() 함수를 호출 했을 때 소켓 수신 버퍼가 비어 있으면 기다리지 않고 바로 recv() 함수를 종료하는 것입니다.
어떻게 해야 할까요?
Forums:
해당 소켓을
해당 소켓을 non-blocking으로 바꾸시면 됩니다. 플랫폼별로 다른 방법을 사용하니 해당 플랫폼의 문서를 참고하세요.
// 최신버전의
당연하게도 리턴값 검사는 하셔야 합니다. 위에 써드린 코드는 대략의 pseudo code 일뿐.
* nonblock으로 검색해 보면 이미 많은 구현이 있습니다.
운영체제 버전별로 다소 차이가 있으나, 대충 정리하면 아래와 같습니다.
골라서 테스트해보시고 쓰시길....
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
블럭킹 문제인줄
블럭킹 문제인줄 알았는데.
서버쪽에서 메시지를 전송한 다음 바로 끊어 버리네요.
이유는 불명이구요. ...
댓글 달기