recv 서브루틴
용도
연결된 소켓에서 메시지를 수신합니다.
라이브러리
표준 C 라이브러리(libc.a)
구문
설명
수신 서브루틴은 연결된 소켓에서 메시지를 수신합니다. Recvfrom 및 recvmsg 하위 루틴은 연결된 소켓과 연결되지 않은 소켓 모두에서 메시지를 수신합니다. 그러나 일반적으로 연결되지 않은 소켓에만 사용됩니다.
Recv 서 브루틴은 메시지의 길이를 반환합니다. 메시지가 너무 길어 제공된 버퍼에 맞지 않는 경우 메시지를 보낸 소켓 유형에 따라 초과 바이트가 잘릴 수 있습니다.
소켓에 사용 가능한 메시지가 없는 경우 소켓이 차단되지 않는 한 수신 서 브루틴은 메시지가 도착할 때까지 기다립니다. 소켓이 차단되지 않으면 시스템에서 오류를 반환합니다.
선택 하위 루틴을 사용하여 더 많은 데이터가 도착하는 시기를 결정합니다.
소켓 애플리케이션은 COMPAT_43 정의하여 컴파일할 수 있습니다. 이렇게 하면 sockaddr구조가 BSD 4.3 호환됩니다. 자세한 내용은 socket.h 참조하세요.
매개변수
| 항목 | 설명 |
|---|---|
| 소켓 | 소켓 기술자를 지정합니다. |
| 버퍼 | 메시지를 게재할 주소를 지정합니다. |
| 길이 | 버퍼 매개변수의 크기를 지정합니다. |
| 플래그 | 메시지 수신을 제어하는 값을 가리킵니다. /usr/include/sys/socket.h 파일은 Flags 매개변수를 정의합니다. 호출을 받기 위한 인수는 다음 값 중 하나 이상을 논리적으로 OR하여 구성합니다:
|
리턴 값
성공적으로 완료되면 수신 서브루틴은 메시지 길이를 바이트 단위로 반환합니다.
수신 서브루틴이 실패하면 서브루틴 핸들러는 다음 기능을 수행합니다:
- 호출 프로그램에 -1 값을 반환합니다.
- 연결이 끊어지면 0을 반환합니다.
- 특정 오류를 나타내는 오류 코드를 errno 전역 변수로 이동합니다.
오류 코드
다음 오류 중 하나라도 발생하면 수신 서브루틴이 실패한 것입니다:
| 오류 | 설명 |
|---|---|
| EBADF | 소켓 매개변수가 유효하지 않습니다. |
| ECONRESET | 원격 피어가 연결을 강제로 종료합니다. |
| 기본값 | 데이터가 프로세스 주소 공간의 존재하지 않거나 보호된 부분으로 수신되도록 지시되었습니다. 버퍼 매개변수가 유효하지 않습니다. |
| EINTR | 데이터를 사용할 수 있기 전에 신호가 수신 서브루틴을 중단시켰습니다. |
| EINVAL | MSG_OOB 플래그가 설정되어 있고 대역 외 데이터를 사용할 수 없습니다. |
| 에노부프 | 시스템에서 작업을 수행할 수 있는 리소스가 부족합니다. |
| ENOTCONN | 연결되지 않은 SOCK_STREAM 소켓에서 수신이 시도됩니다. |
| 엔오츠옥 | 소켓 매개변수는 소켓이 아닌 파일을 참조합니다. |
| EOPNOTSUPP | MSG_OOB 플래그가 SOCK_DGRAM 소켓에 설정되어 있거나, MSG_OOB 플래그가 AF_UNIX 소켓에 설정되어 있습니다. |
| 시간이 다 됐어 | 연결 설정 중에 연결 시간이 초과되었거나 활성 연결에서 전송 시간 초과가 발생했습니다. |
| EWOULDDBLOCK | 소켓이 차단되지 않음으로 표시되어 있으며 연결이 허용되지 않습니다. |