리눅스에서 소켓 통신을 할 때
데이터 전송 함수로 send, sendto, write를 사용 할 수 있다.
함수 원형에서 알 수 있듯이
send 함수와 write 함수는 보내는 상대방의 IP주소를 지정 할 수 없다.
그렇기 때문에 연결지향 방식인 TCP 통신일 때 사용이 가능하다.
또한 write 함수는 flag를 지정 할 수 없기 때문에 단순한 전송만 가능하다.
sendto 함수는 상대방의 IP주소를 지정 할 수 있기 때문에
UDP 통신에서 주로 사용한다.(TCP에서도 사용할 수 있다.)
MSG_OOB
oub-of-band data를 이 개념을 지원하는 소켓으로 보낸다.
MSG_DONTROUTE
패킷을 전송하는데 게이트웨이를 사용하지 않고 직접 연결된 네트워크를 통해서 호스트로 보낸다. 이것은 diagnostic 혹은 routing 프로그램에 의해서만 사용한다.
MSG_DONTWAIT
non-blocking을 가능하게 한다.
MSG_NOSIGNAL
다른 한쪽의 소켓의 연결이 끊겼을때, 소켓으로부터 발생하는 스트림상의 SIGPIPE를 보내지 않도록 요구한다. 그러나 EPIPE에러는 여전히 반환된다.
※ recv, recvfrom, read 역시 동일하다.
write, read로 네트워크 통신이 가능한 이유는 리눅스에서는 모든 장치를 하나의 파일로 보기 때문이다. 네트워크의 소켓도 일종의 파일로 보기 때문에 가능하다.
Out-of-band 데이터의 정의
- 대역밖의 데이터
- 긴급한 데이터로서 일정한 순서를 가지지 않고 순차화 된 데이터보다 더 먼저 처리 되어야 할 필요가 있는 데이터를 일컫는다. 즉, TCP/IP 통신상에서 긴급한 데이터
⑴ 데이터 송신용 시스템 호출
write Stream 소켓을 통해 데이터 송신
send Option을 규정하는 데이터 송신(Stream 소켓)
sendto Datagram 소켓을 통해 데이터 송신
⑵ 데이터 수신용 시스템 호출
read Stream 소켓을 통해 데이터 수신
recv Options을 규정하는 데이터 수신(Stream 소켓)
recvfrom Datagram 소켓을 통해 데이터 수신
'소프트웨어 > 네트워크' 카테고리의 다른 글
소켓 통신 (0) | 2011.07.15 |
---|---|
Little Endian / Big Endian (0) | 2011.07.12 |