본문 바로가기
[ ★ ]Study/Network

Network - recvfrom 함수

by nroses-taek 2017. 3. 12.

Window

#include <winsock2.h>

 

Linux

#include <sys/types.h>
#include <sys/socket.h>

 

Function Prototype

ssize_t recvfrom(int sockfd, void* buf, size_t len, int flags,
                        struct sockaddr* src, socklen_t* addrlen);

 

recvfrom 함수는 recv함수와 동일하게 데이터를 수신받기 위해서 사용되는 함수이다. ( sendto 와 send )

이 또한 차이점이 있는데, 눈치 있는 분들은 비연결 <----> 연결 을 떠올리셨을 것이다.

recvfrom함수는 비연결지향성으로 SOCK_DGRAM으로 생성된 소켓 연결에서 데이터를 수신한다.

 

첫 번째인자부터 세 번쨰 인자까지 기존 recv함수와 동일하다.

http://nroses-taek.tistory.com/33  (recv함수)

 

네 번째 인자는 어디로부터 데이터를 수신받으려는지 수신자의 주소 정보가 저장된 구조체의 주소값이다.

다섯 번째인자는 sockaddr구조체의 길이를 나타낸다.

 

send함수의 recv함수는 연결지향적인 소켓 형태인 스트림 기반(SOCK_STREAM)으로 생성된 소켓에서만

사용할 수 있는 함수지만, sendto 와 recvfrom함수는 데이터그램(SOCK_DGRAM)방식과

스트림(SOCK_STREAM) 방식 모두 사용할 수 있는 함수이다. send와 recv함수는 이미 연결을 위해서

bind혹은 connect함수에서 대상의 주소값을 지정하였기 때문에 실제 데이터를 송수신하기 위해서

사용되는 send / recv 함수에는 대상 주소 값을 지정할 필요가 없어 함수의 인자로 주소 정보를

전달할 필요가 없다.

 

하지만, sendto와 recvfrom은 대상 주소를 지정하고있는데, 이것이 SOCK_DGRAM으로 생성된 소켓에서

사용되며 비연결지향이기 때문에 각각의 함수를 사용할 때 대상 주소를 명시해 주어야 한다.

'[ ★ ]Study > Network' 카테고리의 다른 글

Network - closesocket함수  (0) 2017.03.13
Network - close 함수  (0) 2017.03.12
Network - socklen_t 란  (0) 2017.03.12
sendto 함수  (0) 2017.03.12
recv 함수  (0) 2017.03.12

댓글