recv

RECV(2)         Ð ÑководÑÑво пÑогÑаммиÑÑа Linux         RECV(2)



ÐÐÐÐÐÐÐÐ
       recv, recvfrom, recvmsg - полÑÑиÑÑ ÑообÑение из ÑокеÑа

ÐÐ ÐТÐÐЯ СÐÐÐÐÐ
       #include <sys/types.h>
       #include <sys/socket.h>

       int recv(int s, void *buf, size_t len, int flags);

       int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr
       *from, socklen_t *fromlen);

       int recvmsg(int s, struct msghdr *msg, int flags);

ÐÐÐСÐÐÐÐ
       СиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ recvfrom и recvmsg иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ
       полÑÑÐµÐ½Ð¸Ñ ÑообÑений из ÑокеÑа, и могÑÑ
       иÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ,
       незавиÑимо Ð¾Ñ Ñого, ÑвлÑеÑÑÑ Ð»Ð¸ ÑокеÑ
       оÑиенÑиÑованнÑм на ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ неÑ.

       ÐÑли паÑамеÑÑ from не Ñавен NULL, а ÑÐ¾ÐºÐµÑ Ð½Ðµ
       ÑвлÑеÑÑÑ Ð¾ÑиенÑиÑованнÑм на ÑоединениÑ, Ñо
       адÑÐµÑ Ð¾ÑпÑавиÑÐµÐ»Ñ Ð² ÑообÑении не
       заполнÑеÑÑÑ.  ÐÑгÑÐ¼ÐµÐ½Ñ fromlen пеÑедаеÑÑÑ Ð¿Ð¾
       ÑÑÑлке, в наÑале иниÑиализиÑÑеÑÑÑ ÑазмеÑом
       бÑÑеÑа, ÑвÑзанного Ñ from, а пÑи возвÑаÑе из
       ÑÑнкÑии ÑодеÑÐ¶Ð¸Ñ Ð´ÐµÐ¹ÑÑвиÑелÑнÑй ÑазмеÑ
       адÑеÑа.

       ÐÑзов recv обÑÑно иÑполÑзÑеÑÑÑ ÑолÑко на
       Ñоединенном ÑокеÑе (Ñм.  connect(2)) и иденÑиÑен
       вÑÐ·Ð¾Ð²Ñ recvfrom Ñ Ð¿Ð°ÑамеÑÑом from, ÑÑÑановленнÑм в
       NULL.

       ÐÑе ÑÑи ÑÑнкÑии возвÑаÑаÑÑ Ð´Ð»Ð¸Ð½Ñ ÑообÑÐµÐ½Ð¸Ñ Ð¿Ñи
       ÑÑпеÑном завеÑÑении.  ÐÑли ÑообÑение ÑлиÑком
       длинное и не помеÑÑилоÑÑ Ð² пÑедоÑÑавленнÑй
       бÑÑеÑ, лиÑние байÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¾ÑбÑоÑенÑ, в
       завиÑимоÑÑи Ð¾Ñ Ñипа ÑокеÑа, на коÑоÑом
       пÑинимаÑÑÑÑ ÑообÑÐµÐ½Ð¸Ñ (Ñм.  socket(2)).

       ÐÑли на ÑокеÑе не доÑÑÑпно ни одного
       ÑообÑениÑ, Ñо обÑÑждаемÑе ÑÑнкÑии ожидаÑÑ Ð¸Ñ
       пÑибÑÑиÑ, еÑли ÑÐ¾ÐºÐµÑ Ð½Ðµ помеÑен как
       неблокиÑÑÑÑий (Ñм.  fcntl(2)), в пÑоÑивном ÑлÑÑае
       возвÑаÑаеÑÑÑ Ð·Ð½Ð°Ñение -1, а внеÑнÑÑ
       пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ errno ÑÑÑанавливаеÑÑÑ Ð² знаÑение
       EAGAIN.  ÐÑе ÑÑи ÑÑнкÑии обÑÑно возвÑаÑаÑÑ Ñже
       доÑÑÑпнÑе даннÑе вплоÑÑ Ð´Ð¾ запÑоÑенного
       обÑема, и не ждÑÑ, пока поÑвÑÑÑÑ Ð´Ð°Ð½Ð½Ñе
       полной запÑоÑенной длинÑ.

       СиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ select(2) или poll(2) можно
       иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑвлениÑ
       новÑÑ Ð´Ð°Ð½Ð½ÑÑ.

       ÐÑгÑÐ¼ÐµÐ½Ñ flags ÑиÑÑемного вÑзова recv ÑоÑмиÑÑеÑÑÑ Ñ
       помоÑÑÑ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой опеÑаÑией
       ÐÐРодного или более нижеÑледÑÑÑиÑ
       знаÑений:

       MSG_OOB
              ÐÑÐ¾Ñ Ñлаг запÑаÑÐ¸Ð²Ð°ÐµÑ Ð¿Ñием
              внепоÑоковÑÑ Ð´Ð°Ð½Ð½ÑÑ, коÑоÑÑе в
              пÑоÑивном ÑлÑÑае не бÑли Ð±Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ñ Ð²
              обÑÑном поÑоке даннÑÑ.  ÐекоÑоÑÑе
              пÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¿Ð¾Ð¼ÐµÑаÑÑ Ð´Ð°Ð½Ð½Ñе повÑÑенной
              ÑÑоÑноÑÑи в наÑало обÑÑной оÑеÑеди
              даннÑÑ, и поÑÑÐ¾Ð¼Ñ ÑÑÐ¾Ñ Ñлаг не можеÑ
              иÑполÑзоваÑÑÑÑ Ñ Ñакими пÑоÑоколами.

       MSG_PEEK
              ÐÑÐ¾Ñ Ñлаг заÑÑавлÑÐµÑ Ð²ÑбÑаÑÑ Ð´Ð°Ð½Ð½Ñе из
              наÑала оÑеÑеди, но не ÑдалÑÑÑ Ð¸Ñ Ð¾ÑÑÑда.
              Таким обÑазом, поÑледÑÑÑий вÑзов
              ÑÑнкÑии веÑÐ½ÐµÑ Ñе же ÑамÑе даннÑе.

       MSG_WAITALL
              ÐÑÐ¾Ñ Ñлаг пÑоÑÐ¸Ñ Ð¿Ð¾Ð´Ð¾Ð¶Ð´Ð°ÑÑ, пока не
              пÑÐ¸Ð´ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾Ðµ запÑоÑенное колиÑеÑÑво
              даннÑÑ.  Ðднако, ÑÑÐ¾Ñ Ð²Ñзов вÑе Ñавно
              Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ Ð¼ÐµÐ½ÑÑе даннÑÑ, Ñем бÑло
              запÑоÑено, еÑли бÑл пойман Ñигнал,
              пÑоизоÑла оÑибка или ÑазÑÑв
              ÑоединениÑ, или еÑли наÑали поÑÑÑпаÑÑ
              даннÑе дÑÑгого Ñипа, не Ñого, коÑоÑÑй
              бÑл ÑнаÑала.

       MSG_TRUNC
              ÐозвÑаÑÐ°ÐµÑ ÑеалÑнÑÑ Ð´Ð»Ð¸Ð½Ñ Ð¿Ð°ÐºÐµÑа, даже
              еÑли она бÑла болÑÑе, Ñем
              пÑедоÑÑавленнÑй бÑÑеÑ.  ÐÑÐ¾Ñ Ñлаг можно
              иÑполÑзоваÑÑ ÑолÑко Ñ Ð¿Ð°ÐºÐµÑнÑми
              пÑоÑоколами.

       MSG_ERRQUEUE
              ÐолÑÑиÑÑ Ð¿Ð°ÐºÐµÑ Ð¸Ð· оÑеÑеди оÑибок.

       MSG_NOSIGNAL
              ÐÑÐ¾Ñ Ñлаг оÑклÑÑÐ°ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ðµ
              Ñигнала SIGPIPE на поÑоковÑÑ ÑокеÑаÑ, еÑли
              дÑÑÐ³Ð°Ñ ÑÑоÑона вдÑÑг иÑÑезаеÑ.

       MSG_ERRQUEUE
              Указание ÑÑого Ñлага позволÑеÑ
              полÑÑиÑÑ Ð¸Ð· оÑеÑеди оÑибок ÑокеÑа
              накопивÑиеÑÑ Ð¾Ñибки.  ÐÐ°Ð¶Ð´Ð°Ñ Ð¾Ñибка
              пеÑедаеÑÑÑ Ð²Ð¾ вÑпомогаÑелÑном
              ÑообÑении, Ñей Ñип завиÑÐ¸Ñ Ð¾Ñ Ð¿ÑоÑокола
              (Ð´Ð»Ñ IPv4 ÑÑим Ñипом ÑвлÑеÑÑÑ IP_RECVERR).
              ÐолÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ пÑедоÑÑавиÑÑ Ð±ÑÑеÑ
              доÑÑаÑоÑной длинÑ.  См.  cmsg(3) и ip(7), где
              пÑиведена дополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ.
              СодеÑжимое иÑÑодного пакеÑа, коÑоÑÑй
              пÑивел к оÑибке, пеÑедаеÑÑÑ Ð² виде
              обÑÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ msg_iovec.  ÐÑÑоднÑй
              адÑÐµÑ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð°ÑагÑаммÑ, коÑоÑаÑ
              вÑзвала оÑибкÑ, пеÑедаеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
              msg_name.

              ÐÐ»Ñ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ Ð¾Ñибок адÑÐµÑ Ð½Ðµ пеÑедаеÑÑÑ
              (ÑÑо можно вÑÑÑниÑÑ, пÑовеÑив поле cmsg_len
              ÑÑÑÑкÑÑÑÑ cmsghdr).  ÐÐ»Ñ Ð¾Ñибок пÑи пÑиеме в
              msghdr ÑÑÑанавливаеÑÑÑ MSG_ERRQUEUE.  ÐоÑле Ñого,
              как оÑибка пеÑедана пÑогÑамме,
              ÑледÑÑÑÐ°Ñ Ð¾Ñибка в оÑеÑеди оÑибок
              ÑÑановиÑÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑей оÑибкой и
              пеÑедаеÑÑÑ Ð¿ÑогÑамме пÑи ÑледÑÑÑей
              опеÑаÑии на ÑокеÑе.

              ÐÑибка ÑÑаниÑÑÑ Ð² ÑÑÑÑкÑÑÑе sock_extended_err:

              #define SO_EE_ORIGIN_NONE       0
              #define SO_EE_ORIGIN_LOCAL      1
              #define SO_EE_ORIGIN_ICMP       2
              #define SO_EE_ORIGIN_ICMP6      3

              struct sock_extended_err
              {
                  __u32           ee_errno;   /* Ð½Ð¾Ð¼ÐµÑ Ð¾Ñибки */
                  __u8            ee_origin;  /* иÑÑоÑник ÐµÑ Ð¿ÑоиÑÑÐ¾Ð¶Ð´ÐµÐ½Ð¸Ñ */
                  __u8            ee_type;    /* Ñип */
                  __u8            ee_code;    /* код */
                  __u8            ee_pad;
                  __u32           ee_info;    /* дополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ */
                  __u32           ee_data;    /* пÑоÑие даннÑе */
              };

              struct sockaddr *SOCK_EE_OFFENDER(struct sock_extended_err *);

              ee_errno ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ñение errno длÑ
              ожидаÑÑей оÑибки.  ee_origin иÑÑоÑник
              пÑоиÑÑÐ¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¾Ñибки.  СмÑÑл оÑÑалÑнÑÑ
              полей завиÑÐ¸Ñ Ð¾Ñ Ð¿ÑоÑокола.  SOCK_EE_OFFENDER
              возвÑаÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° адÑÐµÑ ÑеÑевого
              обÑекÑа, поÑодивÑего оÑибкÑ.  ÐÑли ÑÑоÑ
              адÑÐµÑ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑен, Ñо Ñлен sa_family ÑÑÑÑкÑÑÑÑ
              sockaddr ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ñение AF_UNSPEC, а пÑоÑие
              Ð¿Ð¾Ð»Ñ ÑÑÑÑкÑÑÑÑ Ð½Ðµ опÑеделенÑ.  СодеÑжимое
              пакеÑа, вÑзвавÑего оÑибкÑ, пеÑедаÑÑÑÑ Ð²
              виде обÑÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ.

              ÐÐ»Ñ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ Ð¾Ñибок адÑÐµÑ Ð½Ðµ пеÑедаеÑÑÑ
              (ÑÑо можно пÑовеÑиÑÑ, взглÑнÑв на Ñлен
              cmsg_len ÑÑÑÑкÑÑÑÑ cmsghdr).  ÐÑи пÑиеме оÑибок в
              ÑÑÑÑкÑÑÑе msghdr ÑÑÑановлен Ñлаг MSG_ERRQUEUE.
              ÐоÑле Ñого, как оÑибка бÑла пеÑедана,
              ÑледÑÑÑÐ°Ñ Ð² оÑеÑеди оÑибка иÑполÑзÑеÑÑÑ
              Ð´Ð»Ñ Ð¿ÐµÑегенеÑаÑии оÑибки ÑокеÑа, и
              именно она бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑена пÑи
              ÑледÑÑÑей опеÑаÑии Ñ ÑÑим ÑокеÑом.

       СиÑÑемнÑй вÑзов recvmsg иÑполÑзÑÐµÑ ÑÑÑÑкÑÑÑÑ msghdr
       Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð¸Ð·Ð¸ÑоваÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво
       непоÑÑедÑÑвенно пеÑедаваемÑÑ Ð¿Ð°ÑамеÑÑов.  Ð‐
       Ñа ÑÑÑÑкÑÑÑа опÑеделена в <sys/socket.h> Ñак:

              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_name и msg_namelen задаÑÑ Ð°Ð´ÑÐµÑ Ð½Ð°Ð·Ð½Ð°ÑениÑ,
       еÑли ÑÐ¾ÐºÐµÑ Ð½Ðµ Ñоединен; в паÑамеÑÑе msg_name
       можно пеÑедаÑÑ NULL, еÑли имена не ÑÑебÑÑÑÑÑ
       или вообÑе нежелаÑелÑнÑ. ÐÐ¾Ð»Ñ msg_iov и msg_iovlen
       опиÑÑваÑÑ ÑоÑки scatter-gather, ÑÑо обÑÑждаеÑÑÑ Ð²
       readv(2).  Ðоле msg_control, имеÑÑее Ð´Ð»Ð¸Ð½Ñ msg_controllen,
       ÑказÑÐ²Ð°ÐµÑ Ð½Ð° бÑÑÐµÑ Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ ÑообÑений,
       ÑвÑзаннÑÑ Ñ ÑпÑавлением пÑоÑоколов, или на
       бÑÑÐµÑ Ð´Ð»Ñ ÑазнообÑазнÑÑ Ð²ÑпомогаÑелÑнÑÑ
       даннÑÑ.  Ðогда вÑзÑваеÑÑÑ recvmsg, в паÑамеÑÑе
       msg_controllen должна наÑодиÑÑÑÑ Ð´Ð»Ð¸Ð½Ð°
       доÑÑÑпного бÑÑеÑа, Ñей адÑÐµÑ Ð¿ÐµÑедаеÑÑÑ Ð²
       msg_control; пÑи ÑÑпеÑном завеÑÑении в ÑÑом
       паÑамеÑÑе бÑÐ´ÐµÑ Ð½Ð°ÑодиÑÑÑÑ Ð´Ð»Ð¸Ð½Ð°
       поÑледоваÑелÑноÑÑи конÑÑолÑнÑÑ ÑообÑений.

       СообÑÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÑÑ ÑакÑÑ ÑоÑмÑ:

              struct cmsghdr {
                  socklen_t   cmsg_len;   /* колиÑеÑÑво Ð±Ð°Ð¹Ñ Ð´Ð°Ð½Ð½ÑÑ, */
                                          /* вклÑÑÐ°Ñ hdr */
                  int         cmsg_level; /* пÑоÑокол  */
                  int         cmsg_type;  /* Ñип, завиÑÑÑий Ð¾Ñ Ð¿ÑоÑокола */
              /* далÑÑе ÑледÑеÑ
                  u_char      cmsg_data[]; */
              };

       РвÑпомогаÑелÑнÑм даннÑм нÑжно обÑаÑаÑÑÑÑ
       ÑолÑко Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼Ð°ÐºÑоÑов, опÑеделеннÑÑ Ð²
       cmsg(3).

       ÐапÑимеÑ, Linux иÑполÑзÑÐµÑ ÑÑÐ¾Ñ Ð¼ÐµÑанизм
       вÑпомогаÑелÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð»Ñ Ñого, ÑÑобÑ
       пеÑедаваÑÑ ÑеÑез Unix-ÑокеÑÑ ÑаÑÑиÑеннÑе
       оÑибки, Ñлаги IP и ÑайловÑе деÑкÑипÑоÑÑ.

       Ðоле msg_flags в msghdr ÑÑÑанавливаеÑÑÑ Ð¿Ñи
       возвÑаÑе из recvmsg(2).  Ðно Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ
       неÑколÑко Ñлагов:

       MSG_EOR
              ознаÑÐ°ÐµÑ "ÐºÐ¾Ð½ÐµÑ Ð·Ð°Ð¿Ð¸Ñи": возвÑаÑеннÑе
              даннÑе заканÑиваÑÑ Ð·Ð°Ð¿Ð¸ÑÑ (обÑÑно
              иÑполÑзÑеÑÑÑ Ð²Ð¼ÐµÑÑе Ñ ÑокеÑами Ñипа
              SOCK_SEQPACKET).

       MSG_TRUNC
              ознаÑаеÑ, ÑÑо ÑвоÑÑÐ¾Ð²Ð°Ñ ÑаÑÑÑ Ð´Ð°ÑагÑаммÑ
              бÑла оÑбÑоÑена, поÑÐ¾Ð¼Ñ ÑÑо даÑагÑамма
              бÑла болÑÑе, Ñем пÑедоÑÑавленнÑй бÑÑеÑ.

       MSG_CTRUNC
              ознаÑаеÑ, ÑÑо ÑаÑÑÑ ÑпÑавлÑÑÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð±Ñла
              оÑбÑоÑена из-за недоÑÑаÑка меÑÑа в
              бÑÑеÑе вÑпомогаÑелÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ.

       MSG_OOB
              возвÑаÑаеÑÑÑ Ð´Ð»Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°Ñии полÑÑениÑ
              внепоÑоковÑÑ Ð´Ð°Ð½Ð½ÑÑ.

       MSG_ERRQUEUE
              ознаÑаеÑ, ÑÑо бÑли полÑÑÐµÐ½Ñ Ð½Ðµ даннÑе, а
              ÑаÑÑиÑенное ÑообÑение об оÑибке из
              оÑеÑеди оÑибок ÑокеÑа.

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

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

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

       EBADF   ÐÑгÑÐ¼ÐµÐ½Ñ s ÑвлÑеÑÑÑ Ð½ÐµÐ²ÐµÑнÑм деÑкÑипÑоÑом.

       ECONNREFUSED
               СеÑевой компÑÑÑÐµÑ Ñ Ð´ÑÑгой ÑÑоÑонÑ
               оÑказалÑÑ ÑÑÑанавливаÑÑ ÑеÑевое
               Ñоединение (обÑÑно поÑомÑ, ÑÑо Ñам не
               ÑабоÑÐ°ÐµÑ Ð·Ð°Ð¿ÑоÑеннÑй ÑеÑвиÑ).

       ENOTCONN
               СокеÑ, ÑвÑзаннÑй Ñ Ð¿ÑоÑоколом,
               оÑиенÑиÑованнÑм на ÑоединениÑ, не бÑл
               Ñоединен (Ñм. опиÑание ÑÑнкÑий connect(2) и
               accept(2)).

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

       EAGAIN  Ð¡Ð¾ÐºÐµÑ Ð¿Ð¾Ð¼ÐµÑен как неблокиÑÑÑÑий, а
               опеÑаÑÐ¸Ñ Ð¿Ñиема даннÑÑ Ð¼Ð¾Ð³Ð»Ð°
               заблокиÑоваÑÑ ÐµÐ³Ð¾, или же бÑл
               ÑÑÑановлен Ñайм-аÑÑ Ð½Ð° пÑием даннÑÑ, и
               ÑÑÐ¾Ñ Ñайм-аÑÑ Ð·Ð°ÐºÐ¾Ð½ÑилÑÑ, а даннÑе Ñак и
               не бÑли пÑинÑÑÑ.

       EINTR   ÐÑием даннÑÑ Ð±Ñл пÑеÑван Ñигналом, а
               даннÑе еÑе не бÑли доÑÑÑпнÑ.

       EFAULT  УказаÑÐµÐ»Ñ Ð½Ð° пÑиемнÑй бÑÑÐµÑ ÑказÑваеÑ
               вне адÑеÑного пÑоÑÑÑанÑÑва пÑоÑеÑÑа.

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

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       4.4BSD (ÑÑи ÑиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ Ð²Ð¿ÐµÑвÑе поÑвилиÑÑ Ð²
       4.2BSD).

ÐÐÐÐЧÐÐÐÐ
       ÐÑÑепÑиведеннÑе пÑоÑоÑÐ¸Ð¿Ñ ÑооÑвеÑÑÑвÑÑÑ 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), read(2), select(2), getsockopt(2), socket(2), cmsg(3)

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



СÑÑаниÑа Ð ÑководÑÑва ÐApr 1999x                           RECV(2)