2014-03-25 3 views
0

버클리 소켓에서 MSG_WAITALL 플래그가 설정된 recv 함수는 요청 된 전체 데이터가 읽힐 때까지 여러 읽기 기능을 대체합니까?버클리 소켓의 MSG_WAITALL 메커니즘

recv 함수는 하나의 호출에서 크기로 결정된 전체 블록을 읽는 반면, read 함수는 데이터 블록의 일부를 읽을 수 있으며, 전체 블록이 나타날 때까지 루프에서 여러 번 호출해야합니다. 독서?

답변

1

예, MSG_WAITALL은 요청 된 바이트가 모두 읽힐 때까지 대기하도록합니다 (recv()). 그러나 블로킹 모드에서만 지원되며 비 블로킹 모드에서는 지원되지 않으며 TCP와 같은 스트림 지향 소켓에서만 작동합니다. 그렇더라도, recv()이 신호에 의해 인터럽트되면 읽고 쓰는 것을 계속해야한다면 리눅스에서와 같이 반복해야합니다.