.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1983-1991, The Regents of the University of California. .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH socket 2 "29 октября 2025 г." "Linux man\-pages 6.18" .SH НАИМЕНОВАНИЕ socket \- создаёт конечную точку соединения .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP,\ \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBint socket(int \fP\fIdomain\fP\fB, int \fP\fItype\fP\fB, int \fP\fIprotocol\fP\fB);\fP .fi .SH ОПИСАНИЕ Системный вызов \fBsocket\fP() создаёт конечную точку соединения и возвращает файловый дескриптор, указывающий на эту точку. Возвращаемый при успешном выполнении файловый дескриптор будет иметь самый маленький номер, который не используется процессом. .P Параметр \fIdomain\fP задает домен соединения: выбирает семейство протоколов, которое будет использоваться для соединения. Семейства описаны в \fI\fP. В настоящее время ядром Linux распознаются следующие форматы: .TS tab(:); l1 lw40 l. Имя:Цель:Справочная страница T{ \fBAF_UNIX\fP T}:T{ Локальное соединение T}:T{ \fBunix\fP(7) T} T{ \fBAF_LOCAL\fP T}:T{ Синоним \fBAF_UNIX\fP T}:T{ T} T{ \fBAF_INET\fP T}:Протоколы Интернет IPv4:T{ \fBip\fP(7) T} T{ \fBAF_AX25\fP T}:T{ Протокол любительского радио AX.25 T}:T{ .\" Part of ax25-tools \fBax25\fP(4) T} T{ \fBAF_IPX\fP T}:Протоколы Novell IPX: T{ \fBAF_APPLETALK\fP T}:AppleTalk:T{ \fBddp\fP(7) T} T{ \fBAF_X25\fP T}:ITU\-T X.25 / ISO/IEC\ 8208 protocol:T{ \fBx25\fP(7) T} T{ \fBAF_INET6\fP T}:Протоколы Интернет IPv6:T{ \fBipv6\fP(7) T} T{ \fBAF_DECnet\fP T}:T{ Протокольные сокеты DECet T} T{ \fBAF_KEY\fP T}:T{ Протокол управления ключами, изначально разрабатывавшийся для использования с IPsec T} T{ \fBAF_NETLINK\fP T}:T{ Устройство для взаимодействия с ядром T}:T{ \fBnetlink\fP(7) T} T{ \fBAF_PACKET\fP T}:T{ Низкоуровневый пакетный интерфейс T}:T{ \fBpacket\fP(7) T} T{ \fBAF_RDS\fP T}:T{ .\" commit: 639b321b4d8f4e412bfbb2a4a19bfebc1e68ace4 Протокол надёжных датаграмных сокетов (RDS) T}:T{ .\" rds-tools: https://github.com/oracle/rds-tools/blob/master/rds.7 .\" rds-tools: https://github.com/oracle/rds-tools/blob/master/rds-rdma.7 \fBrds\fP(7) .br \fBrds\-rdma\fP(7) T} T{ \fBAF_PPPOX\fP T}:T{ Транспортный слой PPP общего назначения для настройки туннелей L2 (L2TP и PPPoE) T} T{ \fBAF_LLC\fP T}:T{ .\" linux-history commit: 34beb106cde7da233d4df35dd3d6cf4fee937caa Протокол управления логической связью (IEEE 802.2 LLC) T} T{ \fBAF_IB\fP T}:T{ .\" commits: 8d36eb01da5d371f..ce117ffac2e93334 Собственная адресация InfiniBand T} T{ \fBAF_MPLS\fP T}:T{ .\" commits: 0189197f441602acdca3f97750d392a895b778fd Многопротокольная коммутация по меткам T} T{ \fBAF_CAN\fP T}:T{ .\" commits: 8dbde28d9711475a..5423dd67bd0108a1 Протокол шины сети транспортных контроллеров T} T{ \fBAF_TIPC\fP T}:T{ .\" commits: b97bf3fd8f6a16966d4f18983b2c40993ff937d4 Протокол «кластерных доменных сокетов» TIPC T} T{ \fBAF_BLUETOOTH\fP T}:T{ .\" commits: 8d36eb01da5d371f..ce117ffac2e93334 Сокетный протокол Bluetooth низкого уровня T} T{ \fBAF_ALG\fP T}:T{ .\" commit: 03c8efc1ffeb6b82a22c1af8dd908af349563314 Интерфейс к ядерному крипто\-API T} T{ \fBAF_VSOCK\fP T}:T{ .\" commit: d021c344051af91f42c5ba9fdedc176740cbd238 Протокол VSOCK (изначально «VMWare VSockets») для связей гипервизор\-гость T}:T{ \fBvsock\fP(7) T} T{ \fBAF_KCM\fP T}:T{ .\" commit: 03c8efc1ffeb6b82a22c1af8dd908af349563314 KCM (kernel connection multiplexer) interface T} T{ \fBAF_XDP\fP T}:T{ .\" commit: c0c77d8fb787cfe0c3fca689c2a30d1dad4eaba7 Интерфейс XDP (express data path) T} .TE .P Подробнее об адресных семействах, приведённых выше, а также информацию о других адресных семействах можно найти в \fBaddress_families\fP(7). .P Сокет имеет тип \fItype\fP, задающий семантику соединения. В настоящее время определены следующие типы: .TP 16 \fBSOCK_STREAM\fP Обеспечивает создание двусторонних, надёжных потоков байтов на основе установления соединения. Может также поддерживаться механизм внепоточных данных. .TP \fBSOCK_DGRAM\fP Поддерживает дейтаграммы (ненадежные сообщения с ограниченной длиной без установки соединения). .TP \fBSOCK_SEQPACKET\fP Обеспечивает работу последовательного двустороннего канала для передачи дейтаграмм на основе соединений; дейтаграммы имеют постоянный размер; от получателя требуется за один раз прочитать целый пакет. .TP \fBSOCK_RAW\fP Обеспечивает прямой доступ к сетевому протоколу. .TP \fBSOCK_RDM\fP Обеспечивает надежную доставку дейтаграмм без гарантии, что они будут расположены по порядку. .TP \fBSOCK_PACKET\fP Устарел и не должен использоваться в новых программах; см. \fBpacket\fP(7). .P Некоторые типы сокетов могут быть не реализованы во всех семействах протоколов. .P Начиная с Linux 2.6.27, аргумент \fItype\fP предназначается для двух вещей: кроме определения типа сокета, для изменения поведения \fBsocket\fP() он может содержать побитно сложенные любые следующие значения: .TP 16 \fBSOCK_NONBLOCK\fP Устанавливает флаг состояния файла \fBO_NONBLOCK\fP для нового открытого файлового описания (смотрите \fBopen\fP(2)), на которое ссылается новый файловый дескриптор. Использование данного флага делает ненужными дополнительные вызовы \fBfcntl\fP(2) для достижения того же результата. .TP \fBSOCK_CLOEXEC\fP Устанавливает флаг close\-on\-exec (\fBFD_CLOEXEC\fP) для нового открытого файлового дескриптора. Смотрите описание флага \fBO_CLOEXEC\fP в \fBopen\fP(2) для того, чтобы узнать как это может пригодиться. .P В \fIprotocol\fP задаётся определённый протокол, используемый с сокетом. Обычно, только единственный протокол существует для поддержи определённого типа сокета с заданным семейством протоколов, в этом случае в \fIprotocol\fP можно указать 0. Однако, может существовать несколько протоколов, тогда нужно указать один из них. Номер используемого протокола зависит от "домена соединения\*(rq, по которому устанавливается соединение; см. \fBprotocols\fP(5). Смотрите \fBgetprotoent\fP(3), где описано, как соотносить имена протоколов с их номерами. .P Сокеты типа \fBSOCK_STREAM\fP являются соединениями полнодуплексных байтовых потоков. Они не сохраняют границы записей. Потоковый сокет должен быть в состоянии \fIсоединения\fP перед тем, как из него можно будет отсылать данные или принимать их. Соединение с другим сокетом создается с помощью системного вызова \fBconnect\fP(2). После соединения данные можно передавать с помощью системных вызовов \fBread\fP(2) и \fBwrite\fP(2) или одного из вариантов системных вызовов \fBsend\fP(2) и \fBrecv\fP(2). Когда сеанс закончен, выполняется команда \fBclose\fP(2). Внепоточные данные могут передаваться, как описано в \fBsend\fP(2), и приниматься, как описано в \fBrecv\fP(2). .P Протоколы связи, которые реализуют \fBSOCK_STREAM\fP, следят, чтобы данные не были потеряны или дублированы. Если часть данных, для которых имеется место в буфере протокола, не может быть передана за определённое время, соединение считается разорванным. Когда в сокете включен флаг \fBSO_KEEPALIVE\fP, протокол каким\-либо способом проверяет, не отключена ли ещё другая сторона. Если процесс посылает или принимает данные, пользуясь «разорванным» потоком, ему выдаётся сигнал \fBSIGPIPE\fP; это приводит к тому, что процессы, не обрабатывающие этот сигнал, завершаются. Сокеты \fBSOCK_SEQPACKET\fP используют те же самые системные вызовы, что и сокеты \fBSOCK_STREAM\fP. Единственное отличие в том, что вызовы \fBread\fP(2) возвращают только запрошенное количество данных, а остальные данные пришедшего пакета будут отброшены. Границы сообщений во входящих дейтаграммах сохраняются. .P Сокеты \fBSOCK_DGRAM\fP и \fBSOCK_RAW\fP позволяют посылать дейтаграммы принимающей стороне, заданной при вызове \fBsendto\fP(2). Дейтаграммы обычно принимаются с помощью вызова \fBrecvfrom\fP(2), который возвращает следующую дейтаграмму с соответствующим обратным адресом. .P Тип \fBSOCK_PACKET\fP считается устаревшим типом сокета; он позволяет получать необработанные пакеты прямо от драйвера устройства. Используйте вместо него \fBpacket\fP(7). .P Системный вызов \fBfcntl\fP(2) с аргументом \fBF_SETOWN\fP может использоваться для задания группы процессов, которая будет получать сигнал \fBSIGURG\fP, когда прибывают внепоточные данные, или сигнал \fBSIGPIPE\fP, когда соединение типа \fBSOCK_STREAM\fP неожиданно обрывается. Этот вызов также можно использовать, чтобы задать процесс или группу процессов, которые получают асинхронные уведомления о событиях ввода\-вывода с помощью \fBSIGIO\fP. Использование \fBF_SETOWN\fP эквивалентно использованию вызова \fBioctl\fP(2) с аргументом \fBFIOSETOWN\fP или \fBSIOCSPGRP\fP. .P When the network signals an error condition to the protocol module (e.g., using an ICMP message for IP) the pending error flag is set for the socket. The next operation on this socket will return the error code of the pending error. For some protocols, it is possible to enable a per\-socket error queue to retrieve detailed information about the error; see \fBIP_RECVERR\fP in \fBip\fP(7). .P Операции сокетов контролируются их параметрами \fIoptions\fP. Эти параметры описаны в \fI\fP. Вызовы \fBsetsockopt\fP(2) и \fBgetsockopt\fP(2) используются, чтобы установить и получить необходимые параметры. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, a file descriptor for the new socket is returned. On error, \-1 is returned, and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ .TP \fBEACCES\fP Нет прав на создание сокета указанного типа и/или протокола. .TP \fBEAFNOSUPPORT\fP Реализация не поддерживает указанное семейства адресов. .TP \fBEINVAL\fP Неизвестный протокол или недоступное семейство протоколов. .TP \fBEINVAL\fP .\" Since Linux 2.6.27 Неверные флаги в \fItype\fP. .TP \fBEMFILE\fP Было достигнуто ограничение по количеству открытых файловых дескрипторов на процесс. .TP \fBENFILE\fP Достигнуто максимальное количество открытых файлов в системе. .TP \fBENOBUFS\fP или \fBENOMEM\fP Недостаточно памяти для создания сокета. Сокет не может быть создан, пока не будет освобождено достаточное количество ресурсов. .TP \fBEPROTONOSUPPORT\fP Тип протокола или указанный протокол не поддерживаются в этом домене. .P Другие ошибки могут быть созданы модулями протоколов более низкого уровня. .SH ВЕРСИИ POSIX.1\-2024 specifies \fBSOCK_CLOFORK\fP, but Linux doesn't support it. .SH СТАНДАРТЫ POSIX.1\-2024. .SH ИСТОРИЯ POSIX.1\-2001, 4.2BSD. .P It is generally portable to/from non\-BSD systems supporting clones of the BSD socket layer (including System\ V variants). .P Для семейств протоколов в 4.x BSD используются константы \fBPF_UNIX\fP, \fBPF_INET\fP, \fBPF_INET\fP и т. д., тогда как \fBAF_UNIX\fP, \fBAF_INET\fP и т. п. используется для указания семейства адресов. Однако, в справочной странице BSD сказано: «Обычно, семейство протоколов совпадает с семейством адресов» и во всех последующих стандартах используется AF_*. .TP \fBSOCK_NONBLOCK\fP .TQ \fBSOCK_CLOEXEC\fP POSIX.1\-2024. .SH ПРИМЕРЫ Пример использования \fBsocket\fP() показан в \fBgetaddrinfo\fP(3). .SH "СМОТРИТЕ ТАКЖЕ" \fBaccept\fP(2), \fBbind\fP(2), \fBclose\fP(2), \fBconnect\fP(2), \fBfcntl\fP(2), \fBgetpeername\fP(2), \fBgetsockname\fP(2), \fBgetsockopt\fP(2), \fBioctl\fP(2), \fBlisten\fP(2), \fBread\fP(2), \fBrecv\fP(2), \fBselect\fP(2), \fBsend\fP(2), \fBshutdown\fP(2), \fBsocketpair\fP(2), \fBwrite\fP(2), \fBgetprotoent\fP(3), \fBaddress_families\fP(7), \fBip\fP(7), \fBsocket\fP(7), \fBtcp\fP(7), \fBudp\fP(7), \fBunix\fP(7) .P \[lq]An Introductory 4.3BSD Interprocess Communication Tutorial\[rq] and \[lq]BSD Interprocess Communication Tutorial\[rq], reprinted in \fIUNIX Programmer's Supplementary Documents Volume 1.\fP .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Alexander Golubev , Azamat Hackimov , Hotellook, Nikita , Spiros Georgaras , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT debian-l10n-russian@lists.debian.org списка рассылки русских переводчиков .ME .