Создать конечную точку для связи
#include <sys/types.h>#include <sys/socket.h>int socket( int domain,int type,int protocol );
<sys/socket.h>
.libsocket
Функция socket() создает конечную точку для связи и возвращает дескриптор.
Сокеты SOCK_STREAM
Сокеты SOCK_STREAM
- это полнодуплексные потоки байт, похожие на каналы. Потоковый сокет должен быть в подключенном состоянии до того, как по нему будут отправлены или получены какие-либо данные. Чтобы создать соединение с другим сокетом используется connect().
После подключения сокета можно передавать данные, используя read() и write() или варианты send() и recv(). По завершении сессии могут быть вызваны close(). Внеполосные данные также могут передаваться (как описано в send()) и приниматься (как описано в recv()).
Протоколы связи, используемые для реализации сокета SOCK_STREAM
, гарантируют, что данные не будут потеряны или дублированы. Если часть данных, для которой протокол пира имеет буферное пространство, не может быть успешно передана в течение разумного промежутка времени, соединение считается разорванным, и результат таких вызовов будут указывать на ошибку, возвращая -1
и устанавливая errno в ETIMEDOUT
.
Сокеты SOCK_DGRAM и SOCK_RAW
С помощью сокетов SOCK_DGRAM
и SOCK_RAW
датаграммы могут быть отправлены получателям, указанным в вызовах send(). Датаграммы обычно принимаются с помощью recvfrom(), которая возвращает следующую датаграмму с ее адресом возврата.
Вызов ioctl()
Возможно использование функции ioctl() для указания группы процессов, которые будут принимать сигнал SIGURG
по мере поступления внеполосных данных. Вызов также может включить оповещения о событиях воода/вывода при помощи значения SIGIO
.
Параметры на уровне сокета
Работа сокетов контролируется параметрами на уровне сокетов. Эти параметры определены в файле <sys/socket.h>
. Используйте setsockopt() и getsockopt(), чтобы установить и получить параметры.
Дескриптор сокета. Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
POSIX 1003.1
По умолчанию, socket() взаимодействует со стеком TCP/IP, управляющим частью пространства имен /dev/socket
. Можно изменить это поведение, установив переменную среды SOCK
.
ICMP6, ICMP, INET6, IP6, IP, IPsec, ROUTE, TCP, UDP, UNIX протоколы
accept(), bind(), close(), connect(), getprotobyname(), getsockname(), getsockopt(), ioctl(), listen(), read(), recv(), select(), send(), shutdown(), socketpair(), write()
Предыдущий раздел: Описание API сетевой библиотеки