이번에는 recv() 함수에 대해서 알아보겠습니다.
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int socket, void *buffer, size_t length, int flags);
Receive a message from a connected socket
▪ data를 수신할 때까지 대기합니다.
▪ socket: socket file descriptor
▪ buffer: message가 저장되어야하는 buffer를 가르킵니다(point).
▪ length: the buffer argument가 가리키는 buffer의 bytes안의 길이 (buffer의 최대 길이)
▪ flags: 수용하는 message의 type
• 0은 regular data에 대한 flag입니다.
flags | 옵션 설명 |
MSG_DONTWAIT | 수신을 위해 대기가 필요하다면 기다리지 않고 -1을 반환하면서 바로 복귀 |
MSG_NOSIGNAL | 상대방과 연결이 끊겼을 때, SIGPIPE 시그널을 받지 않도록 합니다. |
▪ Return value
• Success: 수신받은 bytes의 수 • Zero은 연결이 close됬음을 나타냅니다. • Error:-1
▪ Example
while((str_len = recv(recv_sock, buf, sizeof(buf), 0)) != 0)
{
if (str_len == -1) continue;
buf[str_len]=0; puts(buf);
}