프로그래밍/네트워크
[TCP/IP] send & recv 입출력 함수 (옵션 정보)
카카수(kakasoo)
2020. 7. 20. 17:12
반응형
라즈베리파이를 다루고 있는지라, 이 함수들에 대해서 자세히 볼 수 밖에 없게 되었다.
미리 말하는데, 위의 함수와 동일하게 write와 read함수가 있는데, 거의 비슷하다.
미세한 차이가 있긴 한데, 이 미세한 차이를 느낄 수 있을까, 사실 그걸 위해 설명하는 것이기도 하지만,
send, recv는 옵션을 설정할 수도 있고... usb port 라던가, 입출력 방식에 따른 호환성이 높은 편이라 할 수 있다.ㅌ
리눅스에서의 send & recv 함수
- ssize_t send (int sockfd, const void* buf, size_t nbytes, int flags)
- sockfd // 데이터 전송 대상과의 연결을 의미하는 소켓의 파일 디스크립터, 윈도우에서는 그저 0이었다
- buf // 전송할 데이터를 저장하고 있는 버퍼의 주소 값
- nbytes // 전송할 바이트 수 전달
- flags // 데이터 전송 시에 적용할 추가 옵션 정보
- ssize_t recv (int sockfd, void* buf, size_t nbytes, int flags)
- sockfd // 데이터 수신 대상과의 연결을 의미하는 소켓의 파일 디스크립터 전달
- buf // 수신된 데이터를 저장할 버퍼의 주소 값 전달
- nbytes // 수신할 수 있는 최대 바이트 수 전달
- flags // 데이터 수신 시 적용할 다양한 옵션 정보 전달
윈도우에서는 이미 이 함수들을 다루긴 했지만, 옵션 정보에 관한 내용은 내게도 생소하다.
옵션 정보에 대해서 한 번 보도록 하자.
옵션 | 의미 | send | recv |
MSG_OOB | 긴급 데이터 (Out Of Band data)의 전송을 위한 옵션 | ● | ● |
MSG_PEEK | 입력 버퍼에 수신된 데이터 존재 유무 확인을 위한 옵션 | ● | |
MSG_DONTROUTE | 데이터 전송 과정에서 라우팅 테이블을 참조하지 않을 것을 요구하는 옵션 | ● | |
MSG_DONTWAIT | 입출력 함수 호출 과정에서 블로킹되지 않을 것을 요구하는 옵션 | ● | ● |
MSG_WAITALL | 요청한 바이트 수에 해당하는 데이터가 전부 수신될 때까지 함수 반환을 막는 옵션 | ● |
반응형