C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[71881] Re:win32 socket 입력버퍼 질문입니다.
박우성 [solgari] 3357 읽음    2014-10-17 13:37
ioctlsocket함수를 사용하면 버퍼에 데이터가 쌓여 있는지 알 수 있습니다.

unsigned long rsize;
if( ioctlsocket( sock, FIONREAD, &rsize ) == SOCKET_ERROR ){
  //소켓 오류
}else if( rsize > 0 ){
  //버퍼에 자료가 있음.
}

참고로, 버퍼에 rsize만큼의 데이터가 들어 있을 수도 있고, 더 많이 들어 있을 수도 있습니다. ioctlsocket 호출 중이나 이후에도
네트워크에서 데이터가 더 들어와 있을 수 있기 때문에 ioctlsocket 값이 0일 때까지 계속 recv함수를 호출에서 버퍼를 비워주면
됩니다.

do{
   ioctlsocket으로 버퍼 검사
   recv로 버퍼 비움.
}while( rsize > 0 );

locke 님이 쓰신 글 :
: api로 소켓 프로그래밍을 처음 해보고 있습니다.
: 현재 소켓에 수신버퍼에 받은 데이터가 있는지 검사해서 있을 때만 recv 함수를 호출해서 자료를 가져오는 방법 없을까요?
: recv는.. 데이터가 들어올때까지 무조건 블록킹이라.. 다른 일을 못하고..
: select로 하자니.. 이건 데이터가 들어왔을때만 이벤트가 발생을 해서..
: 이거 말고.. 제가 임의적으로 버퍼 상태를 체크해서 값이 있을 경우만 recv를 하고싶습니다.
: 가능할까요?
:
: -locke
:

+ -

관련 글 리스트
71876 win32 socket 입력버퍼 질문입니다. locke 3209 2014/10/16
71881     Re:win32 socket 입력버퍼 질문입니다. 박우성 3357 2014/10/17
71891         Re:Re:win32 socket 입력버퍼 질문입니다. locke 3476 2014/10/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.