현생/TCP 소켓 프로그래밍
6-4 UDP에서의 connect (connected UDP 소켓) [UDP/IP][C][LINUX]
푸더기
2022. 1. 18. 23:14
반응형
UDP소켓에서는 데이터를 전송할 목적지의 IP와 PORT번호를 등록하지 않습니다. 그렇기 때문에 sendto 함수호출을 통한 데이터의 전송 과정은 크게 세 단계로 이루어져 있습니다.
1. UDP 소켓에 목적지의 IP와 PORT번호 등록
2. 데이터 전송
3. UDP 소켓에 등록된 목적지 정보 삭제
sendto 함수가 호출될 때마다 위의 과정을 반복하게 되는데, 이렇게 목적지 정보가 등록되어 있지 않은 소켓을 가리켜 "unconnected 소켓"이라고 합니다.
반면 목적지가 정해져 있는 UDP소켓을 "connected 소켓"이라고 합니다. 이 소켓은 하나의 호스트에게 오랜 시간 데이터를 송수신 해야할 때 (하나의 호스트에게 sendto 함수를 많이 호출해야 할 때) 사용합니다. 위 과정의 1,3을 줄이게 되는 것인데, 이 경우 UDP 데이터 전송 시간의 1/3을 절약할 수 있습니다.
connected 소켓은 UDP 소켓을 대상으로 connect 함수를 호출하기만 하면 됩니다. 그리고 이후부터는 sendto 함수를 호출할 때 데이터 전송의 과정만 거치게 됩니다. 그리고 sendto 함수와 recvfrom 함수가 아닌 write, read 함수의 호출로도 데이터를 송수신할 수 있습니다. (목적지가 정해져 있기 때문)
즉, 다음과 같이 쓸 수 있습니다.
//sendto(sock, message, strlen(message), 0, (struct sockaddr*)&serv_adr, sizeof(serv_adr));
write(sock, message, strlen(message));
//str_len = recvfrom(sock, message, BUF_SIZE, 0, (struct sockaddr*)&from_adr, &adr_sz);
str_len = read(sock, message, sizeof(message)-1);
반응형