send

SEND(2)                     Linux Programmer's Manual                    SEND(2)



이름
       send, sendto, sendmsg - 소켓으로부터의 메시지를 보낸다.

사용법
       #include <sys/types.h>
       #include <sys/socket.h>

       int send(int s, const void *msg, size_t len, int flags);
       int sendto(int s, const void *msg, size_t len, int flags, const struct
       sockaddr *to, socklen_t tolen);
       int sendmsg(int s, const struct msghdr *msg, int flags);

설명
       Send, sendto, 그리고 sendmsg 는 다른 소켓으로 메시지를 보내는데 사용된다.  Send 은 소켓이 connected
       상태에 있을 때 사용된다. 반면 sendto sendmsg 언제든 사용할 수 있다.

       목표의 주소는 to 가 그것의 크기를 정하는 tolen 과 함께 주어진다. 메시지의 길이는 len.  으로 주어진다. 메시지가 너무
       길어서 기초적인 프로토콜을 사용해 자동으로 넘어갈 수 없다면, 에러 EMSGSIZE 가 반환되고, 메시지는 전해지지 않는다.

       send.  에는 전달을 실패할 징후는 없다. 국부적으로 지적되는 에러는 -1의 반환값에 의해 지적된다.

       메시지가 소켓의 send 버퍼에 맞지 않으면, send 는 소켓이 non-blocking I/O mode에 있지 않는다면 일반적으로
       막는다 non-blocking mode에서 이런 경우엔, EAGAIN 을 반환한다.  select(2) 호출은 언제 다음 자료를
       보낼지를 결정하는데 쓰인다.

       flags 매개 변수는 flagword이고, 아래 flag를 가질 수 있다:

       MSG_OOB
              out-of-band data를 이 개념을 지원하는 소켓으로 보낸다 (e.g.  SOCK_STREAM); 기초
              프로토콜은 반드시 out-of-band data를 지원한다..

       MSG_DONTROUTE
              패킷을 전송하는데 게이트웨이를 사용하지 않고, 직접 연결된 네트웍을 통해서 호스트로 보낸다. 이것은 diagnostic
              혹은 routing program에 의해서만 사용된다. 이것은 오직 프로토콜군을 위해서만 정의된다; 패킷 소켓은 하지
              않는다.

       MSG_DONTWAIT
              non-blocking operation을 가능케 한다; operation이 막혔을 때 EAGAIN 가 반환된다.
              (이것은 또한 O_NONBLOCK F_SETFL fcntl(2) 와 함께 사용하는 것을 가능하게 할 수 있다.)

       MSG_NOSIGNAL
              다른 한쪽 끝이 연결을 끊었을 때, 소켓으로부터 비롯된 스트림상의 에러에 SIGPIPE 을 보내지 않도록 요구한다.
              EPIPE 에러는 여전히 반환된다.

       msghdr 구조에 대한 설명을 보려면 recv(2) 을 보라.  msg_control msg_controllen 구성요소를
       사용하는 제어 정보를 보낼 수 있다. 커널이 처리할 수 있는 최대 제어 버퍼의 길이는 net.core.optmem_max
       sysctl에 의해 소켓단위로 제한되어 있다. ; socket(7).  을 보라

반환값
       보내진 문자의 수를 반환하거나 에러 발생시 -1을 반환한다.

에러
       이것은 소켓 레이어에 의해 발생되는 몇몇 표준적인 에러다. 추가적인 에러는 기초 프로토콜 모듈로부터 발생되거나 반환된다; 각각의
       매뉴얼을 참조하라.

       EBADF  실제하지 않는 descriptor가 지정되었다.

       ENOTSOCK
              독립변수 s 가 소켓이 아니다.

       EFAULT 실제하지 않는 사용자 공간 주소가 매개변수로 지정되었다.

       EMSGSIZE
              소켓이 메시지를 자동으로 보내줄 것을 요청했지만, 보내진 메시지의 크기가 이것을 불가능하게 하였다.

       EAGAIN혹은 EWOULDBLOCK
              소켓이 non-blocking을 표시하였고, 요구된 operation이 깨졌다.

       ENOBUFS
              네트웍 인터페이스를 위한 출력 큐가 가득 찼다.  이것은 일반적으로 인터페이스가 전송을 멈추는 것으로 나타난다. 하지만
              이것은 순간적인 정체로 인한 것이다.  (이것은 리눅스에서는 일어날 수 없다. 장치 큐가 넘칠 때 패킷은 조용히
              중단된다.)

       EINTR  신호가 발생했다.

       ENOMEM 사용 가능한 메모리가 없다.

       EINVAL 실제 사용되지 않는 독립변수가 통과했다.

       EPIPE  소켓으로부터의 연결에서 로컬 앤드가 꺼졌다.  MSG_NOSIGNAL 이 설정되어 있지 않을 경우, 프로세스 역시
              SIGPIPE 를 받는다.

호환
       4.4BSD, SVr4, POSIX 1003.1g draft (이 함수는 4.2BSD에 있다).

주의
       위에서 주어진 초기치는 Single Unix Specification을 따른다, glibc2와 마찬가지이다: flags 독립변수는
       BSD 4.*에서 `int'이다. 하지만, libc4와 libc5에선 `unsigned int'이다; len 독립변수는 BSD
       4.*과 libc4에서 `int'이다. 하지만 libc5에선 `size_t'이다; tolen 독립변수는 BSD 4.*과 libc4,
       libc5에서 `int'이다.  accept(2).  도 참조하라.

관련 항목
       fcntl(2), recv(2), select(2), getsockopt(2), sendfile(2), socket(2),
       write(2), socket(7), ip(7), tcp(7), udp(7)

역자
       ASPLINUX<man@asp-linux.co.kr>, 2000년 8월 1일



Linux Man Page                      July 1999                            SEND(2)