
Сетевые сокеты
.pdf
Ожидание приема соединений
#include <sys/socket.h>
int listen(int sockfd, int backlog);
Возвращает 0 в случае успеха, –1 в случае ошибки
backlog - максимальное количество ожидающих обработки запросов

Прием соединений
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len);
Возвращает дескриптор нового сокета в случае успеха, –1 в случае ошибки
Вызов является блокирующим

int accept()
Новый сокет - сокет соединенный с клиентом
Сокет sockfd остается свободным и готовым к приему новых соединений
addr, len - буфер и его размер куда будет положен адрес клиента

Параметры сокетов
#include <sys/socket.h>
int setsockopt(int sockfd, int level, int option, const void *val, socklen_t len);
Возвращает 0 в случае успеха, –1 в случае ошибки

int level
1.Универсальные параметры, которые присущи всем типам сокетов.
2.Параметры, которые поддерживаются на уровне сокета, но зависят от используемого протокола.
3.Параметры, уникальные для каждого отдельно взятого протокола.
Например:
SOL_SOCKET, IPPROTO_TCP, IPPROTO_IP

SOL_SOCKET
Пример:
int reuse = 1;
setsockopt( fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(int) )
Разрешить повторное использование порта

Пример
Создание простого сервера simple_server.c
В качестве клиента воспользуемся программой telnet или netcat

Пример
Сервер слушающий все сетевые интерфейсы
simple_server_all.c

Передача данных
Функции read и write возможно использовать в случае если было установлено соединение
Достигается совместимость с программами для работы с файлами

Дополнительные функции
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);
Возвращает количество отправленных байтов в случае успеха, –1 в случае ошибки