UDP/IP는 TCP/IP 처럼 클라이언트와 서버로 나뉘고 1 대 다수의 통신 방식은 아니고 그냥 목적 시스템으로 자료를 전송하면 되는데, 문제는 UDP/IP를 이용하여 자료를 수신 받아야 하는 쪽은 받을 준비를 해야 한다.
TCP/IP처럼 한번 연결되면 연결된 시스템과 자료를 주고 받지만 UDP/IP는 자유롭게 시스템 주소를 바꾸어 가면서 자료를 송수신 할 수 있다.
UDP/IP 통신에서는 TCP/IP와는 달리 read()와 write()를 사용하지 않고 recvform()과 sendto()함수를 이용하여 자료를 송수신한다.
sendto()함수를 대신 사용하는 이유는 전송할 목적지를 지정할 수 있기 때문
#include <sys/types.h>
#include <sys/socket.h>
int sendto(int sd, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
return: 성공시 전송한 byte 수, 실패시 -1
MSG_OOB
SOCK_STREAM에만 사용되며 out-of-band 데이터로 전송될 수 있음을 나타냄
MSG_DONTROUTE
데이터는 라우팅될 수 없음으로 지정
MSG_DONTWAIT
NONE BLOCKING 통신이 가능하도록 함
MSG_NOSIGNAL
상대방과 연결이 끊겼을 때, SIGPIPE 시그널을 받지 않도록 함
recvform()함수를 사용하는 이유는 수신되는 자료 외에도 송신지의 정보를 함께 얻을 수 있기 때문
#include <sys/types.h>
#include <sys/socket.h>
int recvfrom(int sd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen)
MSG_OOB
SOCK_STREAM에만 사용되며 out-of-band 데이터로 전송될 수 있음을 나타냄
MSG_DONTROUTE
데이터는 라우팅될 수 없음으로 지정
MSG_DONTWAIT
NONE BLOCKING 통신이 가능하도록 함
MSG_NOSIGNAL
상대방과 연결이 끊겼을 때, SIGPIPE 시그널을 받지 않도록 함