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 |
댓글