kakasoo

[TCP/IP] send & recv 입출력 함수 (옵션 정보) 본문

프로그래밍/네트워크

[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 요청한 바이트 수에 해당하는 데이터가 전부 수신될 때까지 함수 반환을 막는 옵션  

 

반응형