Сетевые сокеты
.pdfСетевые сокеты
Сокеты
Цель - организация как внутримашинного так и межмашинного способа взаимодействия между процессами
●Сокеты поддерживают большое количество сетевых протоколов
●Наиболее популярным протоколом является протокол TCP/IP
Дескрипторы сокетов
Дескриптор сокета - аналог файлового дескриптора
Возможность использования некоторых функций работы с файлами (read, write, ...)
Создание дескриптора
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
Возвращает дескриптор файла (сокета) в случае успеха, –1 в случае ошибки
int socket(int domain, int type, int protocol)
AF_INET |
Домен Интернета IPv4 |
|
|
AF_INET6 |
Домен Интернета IPv6 |
|
|
AF_UNIX |
Домен UNIX |
|
|
AF_UNSPEC |
Неопределенный домен |
|
|
AF_ (от address family – семейство адресов) |
|
AF_UNSPEC обозначает неопределенный домен, который может представлять любой домен
int socket(int domain, int type, int protocol)
SOCK_DGRAM Не ориентированы на создание логического соединения, сообщения фиксированной длины, доставка сообщений не гарантируется
SOCK_RAW |
Интерфейс дейтаграмм к протоколу IP |
SOCK_STREAM Ориентированы на создание логического соединения, упорядоченность передачи данных, гарантируется доставка сообщений, двунаправленный поток байтов
SOCK_SEQPACKET Ориентированы на создание логического соединения, упорядоченность передачи данных, сообщения фиксированной длины, гарантируется доставка сообщений
Протоколы без установки логического соединения
SOCK_DGRAM
●Дейтаграмма - самостоятельное сообщение
●Каждое сообщение имеет указанного адресата
●Доставка не гарантируется
Протоколы с установкой логического соединения
SOCK_STREAM, SOCK_SEQPACKET
Необходима установка соединения Сообщения не содержат адресата
int socket(int domain, int type, int protocol)
Выбор типа протокола. По умолчанию устанавливается в 0 (система сама выбирает протокол на основе типа сокета)
AF_INET + SOCK_STREAM = TCP AF_INET + SOCK_DGRAM = UDP
Сравнение с ФД
socket() похож на open()
Поддерживаются: read, write, close
Не поддерживаются: lseek, fsync, fdatasinc