recv 서브루틴

용도

연결된 소켓에서 메시지를 수신합니다.

라이브러리

표준 C 라이브러리(libc.a)

구문

#include <sys/socket.h>
int recv (Socket,
Buffer, Length, Flags)
int  Socket;
void * Buffer;
size_t  Length;
int  Flags;

설명

수신 서브루틴은 연결된 소켓에서 메시지를 수신합니다. Recvfromrecvmsg 하위 루틴은 연결된 소켓과 연결되지 않은 소켓 모두에서 메시지를 수신합니다. 그러나 일반적으로 연결되지 않은 소켓에만 사용됩니다.

Recv 서 브루틴은 메시지의 길이를 반환합니다. 메시지가 너무 길어 제공된 버퍼에 맞지 않는 경우 메시지를 보낸 소켓 유형에 따라 초과 바이트가 잘릴 수 있습니다.

소켓에 사용 가능한 메시지가 없는 경우 소켓이 차단되지 않는 한 수신 서 브루틴은 메시지가 도착할 때까지 기다립니다. 소켓이 차단되지 않으면 시스템에서 오류를 반환합니다.

선택 하위 루틴을 사용하여 더 많은 데이터가 도착하는 시기를 결정합니다.

소켓 애플리케이션은 COMPAT_43 정의하여 컴파일할 수 있습니다. 이렇게 하면 sockaddr구조가 BSD 4.3 호환됩니다. 자세한 내용은 socket.h 참조하세요.

매개변수

항목 설명
소켓 소켓 기술자를 지정합니다.
버퍼 메시지를 게재할 주소를 지정합니다.
길이 버퍼 매개변수의 크기를 지정합니다.
플래그 메시지 수신을 제어하는 값을 가리킵니다. /usr/include/sys/socket.h 파일은 Flags 매개변수를 정의합니다. 호출을 받기 위한 인수는 다음 값 중 하나 이상을 논리적으로 OR하여 구성합니다:
MSG_OOB
대역 외 데이터를 처리합니다. 대역 외 데이터의 중요성은 프로토콜에 따라 다릅니다.
MSG_PEEK
들어오는 데이터를 들여다봅니다. 데이터는 계속 읽지 않은 것으로 처리되며 다음번 recv( ) 또는 유사한 함수를 호출할 때 읽게 됩니다.
MSG_WAITALL
요청된 바이트 수를 읽을 때까지 함수가 반환하지 않도록 요청합니다. 이 함수는 신호가 잡히거나 연결이 종료되거나 소켓에 오류가 보류 중인 경우에만 요청된 바이트 수보다 적은 바이트 수를 반환할 수 있습니다.

리턴 값

성공적으로 완료되면 수신 서브루틴은 메시지 길이를 바이트 단위로 반환합니다.

수신 서브루틴이 실패하면 서브루틴 핸들러는 다음 기능을 수행합니다:

  • 호출 프로그램에 -1 값을 반환합니다.
  • 연결이 끊어지면 0을 반환합니다.
  • 특정 오류를 나타내는 오류 코드를 errno 전역 변수로 이동합니다.

오류 코드

다음 오류 중 하나라도 발생하면 수신 서브루틴이 실패한 것입니다:

오류 설명
EBADF 소켓 매개변수가 유효하지 않습니다.
ECONRESET 원격 피어가 연결을 강제로 종료합니다.
기본값 데이터가 프로세스 주소 공간의 존재하지 않거나 보호된 부분으로 수신되도록 지시되었습니다. 버퍼 매개변수가 유효하지 않습니다.
EINTR 데이터를 사용할 수 있기 전에 신호가 수신 서브루틴을 중단시켰습니다.
EINVAL MSG_OOB 플래그가 설정되어 있고 대역 외 데이터를 사용할 수 없습니다.
에노부프 시스템에서 작업을 수행할 수 있는 리소스가 부족합니다.
ENOTCONN 연결되지 않은 SOCK_STREAM 소켓에서 수신이 시도됩니다.
엔오츠옥 소켓 매개변수는 소켓이 아닌 파일을 참조합니다.
EOPNOTSUPP MSG_OOB 플래그가 SOCK_DGRAM 소켓에 설정되어 있거나, MSG_OOB 플래그가 AF_UNIX 소켓에 설정되어 있습니다.
시간이 다 됐어 연결 설정 중에 연결 시간이 초과되었거나 활성 연결에서 전송 시간 초과가 발생했습니다.
EWOULDDBLOCK 소켓이 차단되지 않음으로 표시되어 있으며 연결이 허용되지 않습니다.