17.3.1. Создание сокета

17.3.1. Создание сокета

Новые сокеты создаются системным вызовом socket(), который возвращает файловый дескриптор для неинициализированного сокета. При создании сокет привязывается к определенному протоколу, однако соединение для сокета не устанавливается. На данном этапе еще невозможно считывать информацию из сокета и записывать в него.

#include <sys/socket.h>

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

Подобно open(), функция socket() возвращает значение меньше 0, если имела место ошибка, и файловый дескриптор, больший или равный нулю, если все прошло благополучно. Три параметра устанавливают протокол, который нужно использовать.

Первый параметр указывает семейство протоколов и, как правило, принимает одно из значений, перечисленных в табл. 17.1.

Следующий параметр type может иметь одно из значений: SOCK_STREAM, SOCK_DGRAM или SOCK_RAW.[119] Здесь SOCK_STREAM указывает потоковый протокол из данного семейства, a SOCK_DGRAM специфицирует дейтаграммный протокол из того же семейства. Параметр SOCK_RAW предоставляет возможность передавать пакеты прямо в драйвер сетевого устройства, что позволяет пользовательским приложениям поддерживать сетевые протоколы, которые не воспринимаются ядром.

Последний параметр устанавливает протокол для использования с учетом всех ограничений, введенных первыми двумя параметрами. Как правило, значение этого параметра равно 0, что позволяет ядру использовать стандартный протокол установленного типа из указанного семейства. В табл. 17.2 перечислены некоторые допустимые протоколы для семейства PF_INET. Стандартными протоколами здесь считаются IPPROTO_TCP (потоковый) и IPPROTO_UDP (дейтаграммный).

Таблица 17.2. Протоколы IP

Протокол Описание
IPPROTO_ICMP Internet Control Message Protocol (протокол управляющих сообщений в сети Internet) для IPv4.
IPPROTO_ICMPV6 Internet Control Message Protocol (протокол управляющих сообщений в сети Internet) для IPv6.
IPPROTO_IPIP Тоннели IPIP
IPPROTO_IPV6 Заголовки IPv6.
IPPROTO_RAW Пакеты Raw IP.
IPPROTO_TCP Transmission Control Protocol (TCP) (протокол управления передачей).
IPPROTO_UDP User Datagram Protocol (UDP) (протокол передачи дейтаграмм пользователя).
Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Связывание сокета

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Связывание сокета Следующий шаг заключается в привязке сокета к его адресу и конечной точке (endpoint) (направление канала связи от приложения к службе). Вызов socket, за которым следует вызов bind, аналогичен созданию именованного канала. Однако не существует имен, используя


2.1.17. Параметры сокета

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

2.1.17. Параметры сокета Каждый сокет обладает рядом параметров (опций), которые влияют на его работу. Существуют параметры уровня сокета, которые относятся к сокету как к объекту безотносительно используемого протокола и его уровня. Впрочем, некоторые параметры уровня


17.3.1. Создание сокета

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

17.3.1. Создание сокета Новые сокеты создаются системным вызовом socket(), который возвращает файловый дескриптор для неинициализированного сокета. При создании сокет привязывается к определенному протоколу, однако соединение для сокета не устанавливается. На данном этапе


17.6.1. Создание UDP-сокета

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

17.6.1. Создание UDP-сокета Как и любой другой сокет, UDP-сокет создается с помощью функции socket(), однако второй аргумент должен быть SOCK_DGRAM, а последний — либо IPPROTO_UDP, либо просто ноль (так как UDP является стандартным IP-дейтаграммным протоколом).После создания сокета ему


27.3.2. Создание и связывание сокета

Из книги автора

27.3.2. Создание и связывание сокета Основная задача управляющих функций — организовать взаимодействие двух компьютеров, точнее процессов, а также завершить сеанс связи этих процессов. К управляющим функциям относятся функции:? socket() — создание сокета;? bind() — связывание


27.3.9. Установка опций сокета

Из книги автора

27.3.9. Установка опций сокета Поскольку мы используем набор протоколов AF_INET, то в этом пункте будем рассматривать только те опции сокетов, которые относятся к этому набору. Для работы с опциями сокета используются две функции:? getsockopt() — получение опций сокета;? setsockopt() —


Параметр сокета SO_TYPE

Из книги автора

Параметр сокета SO_TYPE Этот параметр возвращает тип сокета. Возвращаемое целое число — константа SOCK_STREAM или SOCK_DGRAM. Этот параметр обычно используется процессом, наследующим сокет при


Параметр сокета SO_USELOOPBACK

Из книги автора

Параметр сокета SO_USELOOPBACK Этот параметр применяется только к маршрутизирующим сокетам (AF_ROUTE). По умолчанию он включен на этих сокетах (единственный из параметров SO_xxx, по умолчанию включенный). В этом случае сокет получает копию всего, что отправляется на


Параметр сокета IP_HRDINCL

Из книги автора

Параметр сокета IP_HRDINCL Если этот параметр задан для символьного сокета IP (см. главу 28), нам следует создать наш собственный заголовок IP для всех дейтаграмм, которые мы отправляем через символьный сокет. Обычно ядро создает заголовок IP для дейтаграмм, отправляемых через


Параметр сокета IP_OPTIONS

Из книги автора

Параметр сокета IP_OPTIONS Установка этого параметра позволяет нам задавать параметры IP в заголовке IPv4. Это требует точного знания формата параметров IP в заголовке IP. Мы рассмотрим этот параметр в контексте маршрутизации от отправителя IPv4 в разделе


Параметр сокета IP_RECVDSTADDR

Из книги автора

Параметр сокета IP_RECVDSTADDR Этот параметр сокета заставляет функцию recvmsg возвращать IP-адрес получателя в получаемой дейтаграмме UDP в качестве вспомогательных данных. Пример использования этого параметра мы приводим в разделе


Параметр сокета IP_RECVIF

Из книги автора

Параметр сокета IP_RECVIF Этот параметр сокета заставляет функцию recvmsg возвращать индекс интерфейса, на котором принимается дейтаграмма UDP, в качестве вспомогательных данных. Пример использования этого параметра мы приводим в разделе


Параметр сокета IP_TOS

Из книги автора

Параметр сокета IP_TOS Этот параметр позволяет нам устанавливать поле тип службы (тип сервиса) (TOS, type-of-service) (рис. А.1) в заголовке IP для сокета TCP или UDP. Если мы вызываем для этого сокета функцию getsockopt, возвращается текущее значение, которое будет помещено в поля DSCP и ECN


Параметр сокета IP_TTL

Из книги автора

Параметр сокета IP_TTL С помощью этого параметра мы можем устанавливать и получать заданное по умолчанию значение TTL (time-to-live field — поле времени жизни, рис. А.1), которое система будет использовать для данного сокета. (TTL для многоадресной передачи устанавливается при помощи


Параметр сокета SCTP_SET_PEER_PRIMARY_ADDR

Из книги автора

Параметр сокета SCTP_SET_PEER_PRIMARY_ADDR Установка этого параметра приводит к отправке собеседнику сообщения, запрашивающего установку конкретного локального адреса в качестве основного. Процесс должен заполнить структуру sctp_setpeerprim и указать в ней идентификатор ассоциации и