IT

리눅스에서 소켓 통신을 할 때

데이터 전송 함수로 send, sendto, write를 사용 할 수 있다.

그림입니다.
원본 그림의 이름: k1.bmp
원본 그림의 크기: 가로 588pixel, 세로 63pixel

함수 원형에서 알 수 있듯이

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
Posted by sinpk