sendmsg

SEND(2)         Ð ÑководÑÑво пÑогÑаммиÑÑа Linux         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 можно
       иÑполÑзоваÑÑ, ÑолÑко еÑли ÑÐ¾ÐºÐµÑ Ð½Ð°ÑодиÑÑÑ Ð²
       Ñоединенном ÑоÑÑоÑнии, Ñогда как sendto и
       sendmsg можно иÑполÑзоваÑÑ Ð² лÑбое вÑемÑ.

       ÐдÑÐµÑ Ð¿Ð¾Ð»ÑÑаÑÐµÐ»Ñ Ð·Ð°Ð´Ð°ÐµÑÑÑ Ð² паÑамеÑÑе to длинÑ
       tolen.  Ðлина ÑообÑÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°ÐµÑÑÑ Ð² паÑамеÑÑе len.
       ÐÑли ÑообÑение ÑлиÑком длинное, ÑÑобÑ
       нижележаÑий пÑоÑокол Ñмог аÑомаÑно
       оÑоÑлаÑÑ ÐµÐ³Ð¾, возвÑаÑаеÑÑÑ ÐºÐ¾Ð´ оÑибки EMSGSIZE,
       а ÑообÑение не оÑÑÑлаеÑÑÑ.

       No indication of failure to deliver is implicit in a send.
       ÐокалÑнÑе оÑибки обознаÑаÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
       возвÑаÑаемого знаÑÐµÐ½Ð¸Ñ -1.

       Ðогда ÑообÑение не помеÑаеÑÑÑ Ð² бÑÑеÑ
       оÑпÑавки ÑокеÑа, send обÑÑно дожидаеÑÑÑ
       завеÑÑÐµÐ½Ð¸Ñ Ð¾ÑпÑавки, еÑли ÑолÑко ÑÐ¾ÐºÐµÑ Ð½Ðµ
       наÑодиÑÑÑ Ð² неблокиÑÑÑÑем Ñежиме.  ÐÑли Ñак,
       Ñо возвÑаÑаеÑÑÑ EAGAIN.  СиÑÑемнÑй вÑзов select(2)
       можно иÑполÑзоваÑÑ Ð´Ð»Ñ Ð²ÑÑÑнениÑ
       возможноÑÑи оÑпÑавки даннÑÑ.

       ÐаÑамеÑÑ flags ÑвлÑеÑÑÑ Ð±Ð¸Ñовой маÑкой и можеÑ
       ÑодеÑжаÑÑ Ñакие Ñлаги:

       MSG_OOB
              ÐоÑÑÐ»Ð°ÐµÑ Ð²Ð½ÐµÐ¿Ð¾ÑоковÑе даннÑе, еÑли
              ÑÐ¾ÐºÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñакое (напÑимеÑ,
              ÑокеÑÑ Ñипа SOCK_STREAM); нижележаÑий
              пÑоÑокол Ñакже должен поддеÑживаÑÑ
              внепоÑоковÑе даннÑе.

       MSG_DONTROUTE
              Ðе иÑполÑзоваÑÑ Ð¼Ð°ÑÑÑÑÑизаÑÐ¸Ñ Ð¿Ñи
              оÑпÑавке пакеÑа, а поÑÑлаÑÑ ÐµÐ³Ð¾ ÑолÑко
              на ÑоÑÑÑ Ð² локалÑной ÑеÑи.  ÐбÑÑно ÑÑо
              иÑполÑзÑеÑÑÑ Ð² диагноÑÑиÑеÑкиÑ
              пÑогÑÐ°Ð¼Ð¼Ð°Ñ Ð¸ пÑогÑÐ°Ð¼Ð¼Ð°Ñ Ð¼Ð°ÑÑÑÑÑизаÑии.  Ð‐
              ÑÐ¾Ñ Ñлаг опÑеделен ÑолÑко длÑ
              маÑÑÑÑÑизиÑÑемÑÑ ÑемейÑÑв пÑоÑоколов;
              пакеÑнÑе ÑокеÑÑ Ð½Ðµ иÑполÑзÑÑÑ
              маÑÑÑÑÑизаÑиÑ.

       MSG_DONTWAIT
              ÐклÑÑÐ°ÐµÑ Ð½ÐµÐ±Ð»Ð¾ÐºÐ¸ÑÑÑÑий Ñежим; еÑли бÑ
              опеÑаÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑла заблокиÑоваÑÑ
              пÑогÑаммÑ, возвÑаÑаеÑÑÑ EAGAIN (ÑÑÐ¾Ñ Ñежим
              Ñакже можно вклÑÑиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿Ñии
              O_NONBLOCK и ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ F_SETFL в ÑÑнкÑии fcntl(2)).

       MSG_NOSIGNAL
              ТÑебÑÐµÑ Ð½Ðµ поÑÑлаÑÑ Ñигнал SIGPIPE когда
              пÑи ÑабоÑе Ñ Ð¿Ð¾Ñоко-оÑиенÑиÑованнÑм
              ÑокеÑом дÑÑÐ³Ð°Ñ ÑÑоÑона обÑÑваеÑ
              Ñоединение.  Ðод оÑибки EPIPE
              возвÑаÑаеÑÑÑ Ð² лÑбом ÑлÑÑае.

       MSG_CONFIRM(ÑолÑко Linux 2.3 и вÑÑе)
              СообÑиÑÑ ÑÑÐ¾Ð²Ð½Ñ ÑоединениÑ, ÑÑо Ð²Ñ ÑÑпеÑно
              полÑÑили оÑÐ²ÐµÑ Ð¾Ñ Ð´ÑÑгой ÑÑоÑонÑ.  УÑовенÑ
              ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑегÑлÑÑно пÑÑаеÑÑÑ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº
              ÑоÑÐµÐ´Ñ (напÑимеÑ, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ unicast ARP), до ÑеÑ
              Ð¿Ð¾Ñ Ð¿Ð¾ÐºÐ° не полÑÑÐ¸Ñ Ñакое ÑообÑение.  ÐÑÑ
              возможноÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ ÑолÑко
              на ÑокеÑÐ°Ñ Ñипа SOCK_DGRAM и SOCK_RAW.  Ð
              наÑÑоÑÑий Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÑа возможноÑÑÑ
              Ñеализована ÑолÑко Ð´Ð»Ñ IPv4 и IPv6.  См.
              arp(7), где опиÑÐ°Ð½Ñ Ð´ÐµÑали.

       ÐпÑеделение ÑÑÑÑкÑÑÑÑ msghdr изложено ниже.
       См. ниже, а Ñакже в recv(2), где опиÑано
       каждое поле.

              struct msghdr {
                     void    * msg_name;     /* необÑзаÑелÑнÑй адÑÐµÑ */
                     socklen_t       msg_namelen;    /* ÑÐ°Ð·Ð¼ÐµÑ Ð°Ð´ÑеÑа */
                     struct iovec    * msg_iov;      /* маÑÑив scatter/gather */
                     size_t  msg_iovlen;     /* # ÑлеменÑÑ Ð² msg_iov */
                     void    * msg_control;  /* ÑлÑжебнÑе даннÑе, Ñм. ниже */
                     socklen_t       msg_controllen; /* ÑÐ°Ð·Ð¼ÐµÑ Ð±ÑÑеÑа ÑлÑжебнÑÑ Ð´Ð°Ð½Ð½ÑÑ */
                     int     msg_flags;      /* Ñлаги на пÑинÑÑом ÑообÑении */
              };

       УпÑавлÑÑÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ поÑÑлаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
       Ñленов msg_control и msg_controllen.  ÐакÑималÑнаÑ
       длина ÑпÑавлÑÑÑего бÑÑеÑа, коÑоÑÑÑ
       поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑдÑо, огÑаниÑена
       sysctl-знаÑением net.core.optmem_max; Ñм.  socket(7).

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐÑи ÑиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво
       оÑпÑавленнÑÑ Ñимволов или -1, еÑли
       пÑоизоÑла оÑибка.

ÐШÐÐÐÐ
       ÐÑÑÑ Ð½ÐµÑколÑко ÑÑандаÑÑнÑÑ Ð¾Ñибок, генеÑиÑÑемÑÑ
       на ÑÑовне ÑокеÑов.  ÐижележаÑие модÑли
       пÑоÑоколов могÑÑ Ñакже возвÑаÑаÑÑ
       дополниÑелÑнÑе ÐºÐ¾Ð´Ñ Ð¾Ñибок; ÑмоÑÑи
       ÑооÑвеÑÑÑвÑÑÑие ÑÑÑаниÑÑ ÑÑководÑÑва.

       EBADF   Указан невеÑнÑй деÑкÑипÑоÑ.

       ENOTSOCK
               ÐÑгÑÐ¼ÐµÐ½Ñ s не ÑвлÑеÑÑÑ ÑокеÑом.

       EFAULT  РкаÑеÑÑве паÑамеÑÑа пеÑедан невеÑнÑй
               адÑеÑ.

       EMSGSIZE
               Ð¡Ð¾ÐºÐµÑ ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ ÑообÑение бÑло
               оÑоÑлано за Ð¾Ð´Ð½Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ (аÑомаÑно), а
               ÑÐ°Ð·Ð¼ÐµÑ ÑообÑÐµÐ½Ð¸Ñ Ð½Ðµ позволÑÐµÑ ÑÑого.

       EAGAIN или EWOULDBLOCK
               Ð¡Ð¾ÐºÐµÑ Ð¿Ð¾Ð¼ÐµÑен как неблокиÑÑÑÑий, а
               запÑоÑÐµÐ½Ð½Ð°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑла бÑ
               заблокиÑоваÑÑ ÐµÐ³Ð¾.

       ENOBUFS ÐÑÑодÑÑÐ°Ñ Ð¾ÑеÑÐµÐ´Ñ ÑеÑевого инÑеÑÑейÑа
               заполнена.  ÐбÑÑно ÑÑо ознаÑаеÑ, ÑÑо
               инÑеÑÑÐµÐ¹Ñ Ð¿ÑекÑаÑил оÑпÑавкÑ, но можеÑ
               бÑÑÑ Ñакже вÑзвано вÑеменной
               пеÑегÑÑзкой.  (ÐÑого не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизойÑи
               под Linux, поÑÐ¾Ð¼Ñ ÑÑо здеÑÑ Ð¿Ð°ÐºÐµÑÑ Ð¿ÑоÑÑо
               оÑбÑаÑÑваÑÑÑÑ, когда оÑеÑÐµÐ´Ñ ÑÑÑÑойÑÑва
               пеÑеполнÑеÑÑÑ.)

       EINTR   ÐоÑвилÑÑ Ñигнал.

       ENOMEM  Ðе ÑваÑило памÑÑи.

       EINVAL  ÐеÑедан невеÑнÑй аÑгÑменÑ.

       EPIPE   ÐокалÑнÑй ÐºÐ¾Ð½ÐµÑ ÑокеÑа,
               оÑиенÑиÑованного на Ñоединение, бÑл
               закÑÑÑ.  Ð ÑÑом ÑлÑÑае пÑоÑеÑÑ Ñакже полÑÑиÑ
               Ñигнал SIGPIPE, еÑли ÑолÑко не ÑÑÑановлен
               Ñлаг MSG_NOSIGNAL.

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       4.4BSD, SVr4, POSIX 1003.1g draft (ÑÑи ÑиÑÑемнÑе вÑзовÑ
       поÑвилиÑÑ Ð² 4.2BSD).

       MSG_CONFIRM ÑвлÑеÑÑÑ Linux-ÑпеÑиÑиÑнÑм ÑаÑÑиÑением.

ÐÐÐÐЧÐÐÐÐ
       ÐÑÑепÑиведеннÑе пÑоÑоÑÐ¸Ð¿Ñ ÑооÑвеÑÑÑвÑÑÑ glibc2.
       СÑандаÑÑ SUS ÑоглаÑен Ñ Ð½Ð¸Ð¼Ð¸, за иÑклÑÑением
       Ñого, ÑÑо Ñам возвÑаÑаемÑе знаÑениÑ
       опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÐºÐ°Ðº ssize_t (Ñогда как в BSD 4.x, libc4
       и libc5 они опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÐºÐ°Ðº int).  ÐÑгÑÐ¼ÐµÐ½Ñ flags
       ÑвлÑеÑÑÑ int в BSD 4.x, но unsigned int в libc4 и libc5.
       ÐÑгÑÐ¼ÐµÐ½Ñ len ÑвлÑеÑÑÑ int в BSD 4.x, но size_t в libc4 и
       libc5.  ÐÑгÑÐ¼ÐµÐ½Ñ fromlen ÑвлÑеÑÑÑ int * в BSD 4.x, libc4 и
       libc5.  ТекÑÑее опÑеделение, socklen_t, бÑло
       изобÑеÑено в POSIX (Ñм. Ñакже accept(2)).


СÐÐТРРТÐÐÐÐ
       fcntl(2), recv(2), select(2), getsockopt(2), sendfile(2), socket(2),
       write(2), socket(7), ip(7), tcp(7), udp(7)

ÐÐÐ ÐÐÐÐ
       Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 2000-2001



СÑÑаниÑа ÑÑководÑÑва ÐÐÑлÑi1999                           SEND(2)