Сетевые сокеты
.pdfФлаги
MSG_DONTROUTE |
Не отправлять пакет за пределы локальной |
|
сети |
|
|
MSG_DONTWAIT |
Разрешить неблокирующий режим выполнения |
|
операции (эквивалент флага O_NONBLOCK) |
|
|
MSG_EOR |
Обозначает конец записи, если |
|
поддерживается протоколом |
|
|
MSG_OOB |
Обозначает передачу экстренных данных, |
|
если поддерживается протоколом |
|
|
sendto
#include <sys/socket.h>
ssize_t sendto(int sockfd, const void *buf, size_t nbytes, int flags, const struct sockaddr *destaddr, socklen_t destlen);
Возвращает количество отправленных байтов в случае успеха, –1 в случае ошибки
Получение данных
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags);
Возвращает длину сообщения в байтах, 0 при отсутствии доступных сообщений и на удаленном конце соединения запрещена операция записи в сокет, –1 в случае ошибки
Флаги
MSG_OOB |
Принять экстренные данные, если |
|
поддерживается протоколом |
|
|
MSG_PEEK |
Вернуть содержимое пакета, но не удалять его |
|
из приемной очереди |
|
|
MSG_TRUNC |
Запросить, чтобы был возвращен реальный |
|
размер пакета, даже если он был обрезан |
|
|
MSG_WAITALL |
Ждать, пока не будут получены все данные |
|
(только для SOCK_STREAM) |
|
|
Получение данных (SOCK_DGRAM)
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict addr, socklen_t *restrict addrlen);
Позволяет сохранить данные о сокете отправителе.
Пример
Простой клиент-серверный протокол общения на основе datagram
server_dg.c
Пример
Простой клиент-серверный протокол общения на основе stream sockets
server_stream.c
Сторона клиента
Для сокета клиент так же должен быть установлен адрес
Обычно назначение адреса клиента переносится под ответственность операционной системы
Установка соединения
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t len);
Возвращает 0 в случае успеха, –1 в случае ошибки
Адрес
Адрес сервера, к которому необходимо подключиться
Ошибки:
●Сервер недоступен
●Очередь сервера переполнена