socket

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



ÐÐÐÐÐÐÐÐ
       socket - ÑоздаÑÑ Ð¾ÐºÐ¾Ð½ÐµÑнÑÑ ÑоÑÐºÑ ÐºÐ¾Ð¼Ð¼ÑникаÑии

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

       int socket(int domain, int type, int protocol);

ÐÐÐСÐÐÐÐ
       socket ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð¾ÐºÐ¾Ð½ÐµÑнÑÑ ÑоÑÐºÑ Ð´Ð»Ñ
       коммÑникаÑии и возвÑаÑÐ°ÐµÑ ÐµÑ Ð´ÐµÑкÑипÑоÑ.

       ÐаÑамеÑÑ domain Ð·Ð°Ð´Ð°ÐµÑ "домен" коммÑникаÑии;
       вÑбиÑÐ°ÐµÑ Ð½Ð°Ð±Ð¾Ñ Ð¿ÑоÑоколов, коÑоÑÑе бÑдÑÑ
       иÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¼ÑникаÑии.  Такие
       набоÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² <sys/socket.h>.  РнаÑÑоÑÑее вÑемÑ
       понимаÑÑÑÑ Ñакие ÑоÑмаÑÑ:

       Ðазвание    ÐазнаÑение                                  СÑÑаниÑа
       PF_UNIX,PF_LOCAL   ÐокалÑÐ½Ð°Ñ ÐºÐ¾Ð¼Ð¼ÑникаÑÐ¸Ñ               unix(7)
       PF_INET            IPv4, пÑоÑÐ¾ÐºÐ¾Ð»Ñ ÐнÑеÑÐ½ÐµÑ                  ip(7)
       PF_INET6           IPv6, пÑоÑÐ¾ÐºÐ¾Ð»Ñ ÐнÑеÑнеÑ
       PF_IPX             IPX - пÑоÑÐ¾ÐºÐ¾Ð»Ñ Novell
       PF_NETLINK         УÑÑÑойÑÑво Ð´Ð»Ñ Ð¾Ð±ÑÐµÐ½Ð¸Ñ                  netlink(7)
                          полÑзоваÑÐµÐ»Ñ Ñ ÑдÑом
       PF_X25             ÐÑоÑокол ITU-T X.25 / ISO-8208                 x25(7)
       PF_AX25            ÐÑоÑокол AX.25, лÑбиÑелÑÑкое
                          Ñадио
       PF_ATMPVC          ATM -- доÑÑÑп к низкоÑÑовневÑм PVC
       PF_APPLETALK       Appletalk                                           ddp(7)
       PF_PACKET          ÐизкоÑÑовневÑй пакеÑнÑй             packet(7)
                          инÑеÑÑейÑ

       Ð¡Ð¾ÐºÐµÑ Ð¸Ð¼ÐµÐµÑ ÑказаннÑй Ñип, type, задаÑÑий
       ÑеманÑÐ¸ÐºÑ ÐºÐ¾Ð¼Ð¼ÑникаÑии.  РнаÑÑоÑÑее вÑемÑ
       опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÑледÑÑÑие ÑипÑ:

       SOCK_STREAM
              ÐбеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð½Ð°Ð´ÐµÐ¶Ð½Ñе,
              двÑнапÑавленнÑе поÑледоваÑелÑнÑе
              поÑоки байÑов, Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой
              Ñоединений.  ÐÐ¾Ð¶ÐµÑ Ñакже поддеÑживаÑÑÑÑ
              меÑанизм вне-поÑоÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ.

       SOCK_DGRAM
              ÐбеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð´Ð°ÑагÑÐ°Ð¼Ð¼Ñ (ненадежнÑе
              ÑообÑÐµÐ½Ð¸Ñ Ñ Ð¾Ð³ÑаниÑенной макÑималÑной
              длиной, без поддеÑжки ÑоединениÑ).

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

       SOCK_RAW
              ÐбеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð´Ð¾ÑÑÑп к низкоÑÑовневомÑ
              ÑеÑÐµÐ²Ð¾Ð¼Ñ Ð¿ÑоÑоколÑ.

       SOCK_RDM
              ÐбеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð½Ð°Ð´ÐµÐ¶Ð½ÑÑ Ð´Ð¾ÑÑавкÑ
              даÑагÑамм без гаÑанÑии иÑ
              поÑледоваÑелÑноÑÑи.

       SOCK_PACKET
              УÑÑаÑело и не должно иÑполÑзоваÑÑÑÑ Ð²
              новÑÑ Ð¿ÑогÑаммаÑ; Ñм.  packet(7).

       ÐекоÑоÑÑе ÑÐ¸Ð¿Ñ ÑокеÑов могÑÑ Ð½Ðµ бÑÑÑ
       ÑеализованнÑми в некоÑоÑÑÑ Ð½Ð°Ð±Ð¾ÑаÑ
       пÑоÑоколов; напÑимеÑ, SOCK_SEQPACKET не
       Ñеализовано в набоÑе AF_INET.

       ÐаÑамеÑÑ protocol Ð·Ð°Ð´Ð°ÐµÑ ÐºÐ¾Ð½ÐºÑеÑнÑй пÑоÑокол,
       коÑоÑÑй иÑполÑзÑеÑÑÑ Ð½Ð° ÑокеÑе.  ÐбÑÑно
       ÑÑÑеÑÑвÑÐµÑ ÑолÑко один пÑоÑокол,
       обеÑпеÑиваÑÑий конкÑеÑнÑй Ñип ÑокеÑа в
       заданном набоÑе пÑоÑоколов.  Ðднако,
       возможно ÑÑÑеÑÑвование неÑколÑÐºÐ¸Ñ ÑакиÑ
       пÑоÑоколов -- Ñогда и иÑполÑзÑеÑÑÑ ÑÑоÑ
       паÑамеÑÑ.  ÐÐ¾Ð¼ÐµÑ Ð¿ÑоÑокола завиÑÐ¸Ñ Ð¾Ñ
       иÑполÑзÑемого “домена коммÑникаÑии”, Ñм.
       protocols(5).  См.  getprotoent(3), где опиÑано, как
       ÑопоÑÑавлÑÑÑ Ð¸Ð¼ÐµÐ½Ð° пÑоÑоколов Ð¸Ñ Ð½Ð¾Ð¼ÐµÑам.

       СокеÑÑ Ñипа SOCK_STREAM ÑвлÑÑÑÑÑ Ð´ÑплекÑнÑми
       поÑоками байÑ, поÑожими на ÑÑÑбÑ.  Ðни не
       ÑоÑÑанÑÑÑ Ð³ÑаниÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð·Ð°Ð¿Ð¸ÑÑми.  ÐоÑоковÑй
       ÑÐ¾ÐºÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð² ÑоединÑнном ÑоÑÑоÑнии
       пеÑед Ñем, как по Ð½ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ оÑÑÑлаÑÑ Ð¸
       пÑинимаÑÑ Ð´Ð°Ð½Ð½Ñе.  Соединение Ñ Ð´ÑÑгим
       ÑокеÑом ÑоздаеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑиÑÑемного вÑзова
       connect(2).  ÐоÑле ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñе можно
       пеÑедаваÑÑ, иÑполÑзÑÑ ÑиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ read(2) и
       write(2), или какой-Ñо из ваÑианÑов ÑиÑÑемнÑÑ
       вÑзовов send(2) и recv(2).  Ðогда ÑеÑÑиÑ
       законÑена, вÑполнÑеÑÑÑ close(2).  Ðне-поÑоÑнÑе
       даннÑе могÑÑ Ð¿ÐµÑедаваÑÑÑÑ, как опиÑано в
       send(2), а пÑинимаÑÑÑÑ, как опиÑано в recv(2).

       ÐоммÑникаÑионнÑе пÑоÑоколÑ, коÑоÑÑе
       ÑеализÑÑÑ SOCK_STREAM, ÑледÑÑ, ÑÑÐ¾Ð±Ñ Ð´Ð°Ð½Ð½Ñе не бÑли
       поÑеÑÑÐ½Ñ Ð¸Ð»Ð¸ пÑодÑблиÑованÑ.  ÐÑли Ñ
       коÑÑеÑпонденÑа имееÑÑÑ Ð¼ÐµÑÑо в бÑÑеÑе, но
       оÑеÑÐµÐ´Ð½Ð°Ñ Ð¿Ð¾ÑÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ
       пеÑедана за ÑазÑмное вÑемÑ, Ñо Ñоединение
       ÑÑиÑаеÑÑÑ Ð¼ÐµÑÑвÑм.  Ðогда на ÑокеÑе вклÑÑен
       Ñлаг SO_KEEPALIVE, пÑоÑокол каким-либо ÑпоÑобом
       пÑовеÑÑеÑ, ÑÑо дÑÑÐ³Ð°Ñ ÑÑоÑона еÑÑ Ð¶Ð¸Ð²Ð°.  Сигнал
       SIGPIPE поÑвлÑеÑÑÑ, еÑли пÑоÑеÑÑ Ð¿Ð¾ÑÑÐ»Ð°ÐµÑ Ð¸Ð»Ð¸
       пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð´Ð°Ð½Ð½Ñе, полÑзÑÑÑÑ ÑазоÑваннÑм
       поÑоком; ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑомÑ, ÑÑо неопÑÑнÑе
       пÑоÑеÑÑÑ, не обÑабаÑÑваÑÑие Ñигнал,
       завеÑÑаÑÑÑÑ.  СокеÑÑ SOCK_SEQPACKET иÑполÑзÑÑÑ Ñе же
       ÑамÑе ÑиÑÑемнÑе вÑзовÑ, ÑÑо и ÑокеÑÑ SOCK_STREAM.
       ÐдинÑÑвенное оÑлиÑие в Ñом, ÑÑо вÑÐ·Ð¾Ð²Ñ read(2)
       веÑнÑÑ ÑолÑко запÑоÑенное колиÑеÑÑво даннÑÑ,
       а оÑÑаÑок пÑибÑвÑего пакеÑа бÑÐ´ÐµÑ Ð¾ÑбÑоÑен.
       ÐÑаниÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑообÑениÑми во вÑодÑÑиÑ
       даÑагÑÐ°Ð¼Ð¼Ð°Ñ ÑоÑÑанÑÑÑÑÑ.

       СокеÑÑ SOCK_DGRAM и SOCK_RAW позволÑÑÑ Ð¿Ð¾ÑÑлаÑÑ
       даÑагÑÐ°Ð¼Ð¼Ñ ÐºÐ¾ÑÑеÑпонденÑам, заданнÑм пÑи
       вÑзове send(2).  ÐаÑагÑÐ°Ð¼Ð¼Ñ Ð¾Ð±ÑÑно пÑинимаÑÑÑÑ Ñ
       помоÑÑÑ Ð²Ñзова recvfrom(2), коÑоÑÑй возвÑаÑаеÑ
       ÑледÑÑÑÑÑ Ð´Ð°ÑагÑÐ°Ð¼Ð¼Ñ Ñ ÑооÑвеÑÑÑвÑÑÑим обÑаÑнÑм
       адÑеÑом.

       SOCK_PACKET --- ÑÑо ÑÑÑаÑевÑий Ñип ÑокеÑа,
       позволÑвÑий полÑÑаÑÑ Ð½ÐµÐ¾Ð±ÑабоÑаннÑе пакеÑÑ
       пÑÑмо Ð¾Ñ Ð´ÑайвеÑа ÑÑÑÑойÑÑва.  ÐÑполÑзÑйÑе
       вмеÑÑо него packet(7).

       СиÑÑемнÑй вÑзов fcntl(2) Ñ Ð°ÑгÑменÑом F_SETOWN
       Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð³ÑÑппÑ
       пÑоÑеÑÑов, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ñигнал SIGURG,
       когда пÑибÑваÑÑ Ð²Ð½Ðµ-поÑоÑнÑе даннÑе или
       Ñигнал SIGPIPE, когда Ñоединение Ñипа SOCK_STREAM
       неожиданно обÑÑваеÑÑÑ.  ÐÑÐ¾Ñ Ð²Ñзов Ñакже
       можно иÑполÑзоваÑÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð¿ÑоÑеÑÑ Ð¸Ð»Ð¸
       гÑÑÐ¿Ð¿Ñ Ð¿ÑоÑеÑÑов, коÑоÑÑе полÑÑаÑÑ Ð°ÑинÑÑоннÑе
       ÑÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ вводе-вÑводе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SIGIO.
       ÐÑполÑзование F_SETOWN ÑквиваленÑно
       иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ioctl(2) Ñ Ð°ÑгÑменÑом SIOSETOWN.

       Ðогда ÑеÑÑ ÑообÑÐ°ÐµÑ Ð¿ÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¾Ð± оÑибке (в
       ÑлÑÑае IP, напÑимеÑ, иÑполÑзÑÑ ICMP-ÑообÑение),
       Ñо Ð´Ð»Ñ ÑокеÑа ÑÑÑанавливаеÑÑÑ Ñлаг ожидаÑÑей
       оÑибки.  СледÑÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ñ ÑÑим ÑокеÑом
       веÑÐ½ÐµÑ ÐºÐ¾Ð´ ожидаÑÑей оÑибки.  ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
       пÑоÑоколов можно ÑазÑеÑиÑÑ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного
       ÑокеÑа оÑеÑÐµÐ´Ñ Ð¾Ñибок, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´ÐµÑалÑнÑÑ
       инÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑибке; Ñм.  IP_RECVERR в ip(7).

       ÐпеÑаÑии ÑокеÑов конÑÑолиÑÑÑÑÑÑ Ð¸Ñ
       паÑамеÑÑами.  ÐÑи паÑамеÑÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð²
       <sys/socket.h>.  setsockopt(2) и getsockopt(2) иÑполÑзÑÑÑÑÑ,
       ÑÑÐ¾Ð±Ñ ÑÑÑановиÑÑ Ð¸ полÑÑиÑÑ Ð¿Ð°ÑамеÑÑÑ,
       ÑооÑвеÑÑÑвенно.

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       Ð ÑлÑÑае оÑибки возвÑаÑаеÑÑÑ -1; в пÑоÑивном
       ÑлÑÑае возвÑаÑаеÑÑÑ Ð´ÐµÑкÑипÑоÑ, ÑÑÑлаÑÑийÑÑ Ð½Ð°
       ÑокеÑ.

ÐШÐÐÐÐ
       EPROTONOSUPPORT
               Тип пÑоÑокола или ÑказаннÑй пÑоÑокол
               не поддеÑживаÑÑÑÑ Ð² ÑÑом домене.

       ENFILE  ЯдÑÑ Ð½Ðµ ÑваÑило памÑÑи, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ
               новÑй ÑокеÑ.

       EMFILE  ÐеÑеполнение ÑаблиÑÑ Ñайлов пÑоÑеÑÑа.

       EACCES  Ðе ÑазÑеÑено Ñоздание ÑокеÑа
               Ñказанного Ñипа и/или пÑоÑокола.

       ENOBUFS или ENOMEM
               ÐедоÑÑаÑоÑно памÑÑи.  Ð¡Ð¾ÐºÐµÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ
               Ñоздан, пока не оÑвободиÑÑÑ Ð¿Ð°Ð¼ÑÑÑ.

       EINVAL  ÐеизвеÑÑнÑй пÑоÑокол, или недоÑÑÑпнÑй
               Ð½Ð°Ð±Ð¾Ñ Ð¿ÑоÑоколов.

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

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       4.4BSD (ÑиÑÑемнÑй вÑзов socket поÑвилÑÑ Ð² 4.2BSD).
       ÐбÑÑно пеÑеноÑимо Ñ/на не-BSD ÑиÑÑемÑ, имеÑÑие
       ÑеализаÑÐ¸Ñ ÑокеÑов BSD (вклÑÑÐ°Ñ Ð²Ð°ÑианÑÑ System
       V).

ÐÐÐÐЧÐÐÐÐ
       ÐÐ»Ñ Ð½Ð°Ð±Ð¾Ñов пÑоÑоколов под BSD 4.* иÑполÑзÑÑÑÑÑ
       конÑÑанÑÑ PF_UNIX, PF_INET и Ñ. д., Ñогда как AF_UNIX и
       Ñ. п. иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑемÑи адÑеÑов.
       Ðднако же, ÑÑÑаниÑа ÑÑководÑÑва из BSD
       обеÑаеÑ: "ÐообÑе, Ð½Ð°Ð±Ð¾Ñ Ð¿ÑоÑоколов
       ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ ÑемÑей адÑеÑов", и в поÑледÑÑÑиÑ
       ÑÑандаÑÑÐ°Ñ Ð²ÐµÐ·Ð´Ðµ иÑполÑзÑеÑÑÑ AF_*.

СÐÐТРРТÐÐÐÐ
       accept(2), bind(2), connect(2), getprotoent(3), getsockname(2),
       getsockopt(2), ioctl(2), listen(2), read(2), recv(2), select(2),
       send(2), shutdown(2), socketpair(2), write(2)

       “Ðводное Ð ÑководÑÑво по межпÑоÑеÑÑной
       коммÑникаÑии в 4.3 BSD” (“An Introductory 4.3 BSD
       Interprocess Communication Tutorial”) пеÑепеÑаÑано в
       ÐополниÑелÑнÑе докÑменÑÑ Ð´Ð»Ñ Ð¿ÑогÑаммиÑÑа
       UNIX, Том 1, (UNIX Programmer's Supplementary Documents Volume 1).

       “Ð ÑководÑÑво по межпÑоÑеÑÑной коммÑникаÑии
       в BSD” пеÑепеÑаÑано в ÐополниÑелÑнÑе
       докÑменÑÑ Ð´Ð»Ñ Ð¿ÑогÑаммиÑÑа UNIX, Том 1, (UNIX
       Programmer's Supplementary Documents Volume 1).

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



Ð ÑководÑÑво по Linux    24 Apr 1999                        SOCKET(2)