개요
사용법 #include <SYS / types.h>
사용법 #include <sys 인 / socket.h>
INT 보내기 (INT의 S , CONST 공극 *의 MSG , size_t와 LEN , int로 플래그 );
INT sendto를 (INT S , CONST 공극 *의 MSG , size_t와 LEN , INT 플래그 , CONST 구조체의 SOCKADDR * 에 ,의 socklen_t의 tolen 독립 );
INT sendmsg (INT S , CONST 구조체는 msghdr *의 MSG , int로 플래그 );
기술
보내기 , sendto를 , 그리고 sendmsg 다른 소켓에 메시지를 전송합니다. 보내기는 동안에 만, 소켓을 연결하는 데 사용 sendto를 하고 sendmsg는 어떤 경우에 사용할 수있다.
대상 주소를 사용 하도록 지정 tolen 독립은 길이를 정의합니다.와 메시지의 길이 LEN 메시지가 낮은 계층 프로토콜을 통과 할 너무 긴 경우 지정이., 함수가 반환 EMSGSIZE의 오류 메시지가 전송되지 않습니다.
데이터 전송 과정에서 오류가 발생에 반환되지 않습니다 보내기. 로컬 오류가 발생하면 -1을 반환한다.
전송 될 메시지가 소켓 버퍼의 길이가 현재 가능한 것보다 큰 경우, 전송 소켓 비 블록 입출력 모드 아니라면 차단 될 것이다. 비 블록 모드의 경우에 반환 EAGAIN의 오류.의 시스템 호출 SELECT (2) 이상의 데이터가 전송 될 때 검출하는데 사용될 수있다.
매개 변수 플래그는 부호 단어, 당신은 다음과 같은 플래그를 포함 할 수 있습니다 :
- 소켓 밴드 데이터에 대한 지원,
- MSG_OOB는 보낼 대역 (예를 들어, (대역) 데이터 SOCK_STREAM의 프로토콜에 기초하여 지원해야 형 소켓) 대역 데이터.
- MSG_DONTROUTE
- ... 아니 소켓 패킷, 게이트웨이에 사용뿐만 아니라 플래그 데이터를 수신 할 수있는 네트워크에 연결된 호스트로 직접 패킷을 전송은 일반적으로 전용이 플래그를 사용하여 진단 및 라우팅 절차 라우팅 프로토콜 제품군을 사용합니다.
- MSG_DONTWAIT
- 비 블록 동작을 이용하여 상기 작업이 리턴 차단이 필요한 경우 EAGAIN의 에러 (도 사용할 수 F_SETFL에게 (2)는 fcntl을 제공 O_NONBLOCK가 이 기능을 달성한다.)
- MSG_NOSIGNAL
- 소켓 스트림 연결의 다른 쪽 끝은 전송 중단하지 않을 경우 SIGPIPE의 신호를,하지만 여전히 반환 EPIPE의 오류입니다.
- MSG_CONFIRM (이상에서만 리눅스 2.3에 대한)
- 통지 링크 층 전달 공정이 일어난 링크 층의 타 단부가 통지되지 않은 경우 성공적인 응답을 얻었다는 (예컨대 자유 ARP를 통해)를 인접한 호스트 네트워크 일반 검색을 수행한다 ..에만 사용될 수 SOCK_DGRAM 및 SOCK_RAW의 타입 소켓은, IPv4 및 IPv6와는 효과적인 세부 사항 참조입니다 ARP를 (. 7)
구조 는 msghdr 다음과 같다. 상세한 내용에 정의 RECV (2) 아래에있다.
-
-
는 msghdr {구조체 공극 * msg_name을; / * 주소 옵션 * / 의 socklen_t msg_namelen; / * 어드레스 길이 * / 구조체 iovec * msg_iov; / * 메시지 어레이 * / 이 size_t msg_iovlen; / * msg_iov * / 요소의 수 공극 * S msg_control 필드; / * 추가 정보 * / 아래 참조 / * 보조 데이터 버퍼의 길이 * /; msg_controllen의 socklen_t이 필드 / / * 메시지 수신 플래그 * 상기 msg_flags에서 INT };
당신이 사용될 수 msg_control 및 필드 msg_controllen의이 . 상기 제어 메시지 버퍼의 최대 길이를 처리 할 수있는 임의의 제어 정보를 전달 부재 커넬 는 net.core.optmem_max 각 소켓 sysctl을 정의한다; 볼 소켓 . (7).
반환 값
그렇지 않으면 -1, 성공적으로 보낸 문자 수를 반환합니다.
오류 코드
표준 오류 중 일부는 다른 소켓 레이어에서 생성되어 생성 된 하위 계층 프로토콜 모듈이며, 각각의 매뉴얼 페이지를 참조하십시오.
- EBADF
- 잘못된 설명을 지정.
- ENOTSOCK
- 매개 변수 들 소켓이 아니다.
- EFAULT
- 매개 변수는 불법 사용자 주소 공간을 지정합니다.
- EMSGSIZE
- 범위를 벗어 메시지 길이.
- EAGAIN 또는 EWOULDBLOCK
- 비 - 블로킹 (non-blocking) 소켓하지만, 요청 된 작업은 차단이 필요합니다.
- ENOBUFS
- 네트워크 인터페이스 출력 큐 장치 큐 오버 플로우 패킷은 단순히 폐기 할 때, 리눅스가 발생하지 않는 임시 정체 (있을 수 있고, 이는 일반적으로 상기 인터페이스는 전송을 중지 한 것을 의미한다. 가득.
- ENTRY
- 수신 신호.
- ENOMEM
- 사용 가능한 메모리가 없습니다.
- 선택
- 매개 변수 전달은 불법입니다.
- EPIPE
- 로컬 터미널 소켓을 연결하는 과정이도 수신이 경우. 닫혀 SIGPIPE의 않는 신호 MSG_NOSIGNAL