logo
Конспект Граур

Закрытие сокета

Если процесс закончил прием либо передачу данных, ему следует закрыть соединение. Это можно сделать с помощью функции shutdown.

#include <sys/types.h>

#include <sys/socket.h>

int shutdown (int sockfd, int mode);

mode - Целое число, которое определяет, какую режим закрытия соединения.

Если mode=0, сокет закрывается для чтения, при этом все дальнейшие попытки чтения будут возвращать end-of-file.

Если mode=1, то сокет закрывается для записи, и дальнейшие попытки передать данные вернут ошибку (-1).

Если mode=2, то сокет закрывается и для чтения, и для записи.

В принципе, для закрытия сокета можно было бы воспользоваться просто функцией close, но тут есть одно отличие. Если используемый для соединения протокол гарантирует доставку данных (тип сокета – виртуальный канал), то вызов close будет блокирован до тех пор, пока система будет пытаться доставить все данные, находящиеся «в пути», в то время как вызов shutdown извещает систему о том, что эти данные уже не нужны и можно не предпринимать попыток их доставить.

В случае успеха функция возвращает 0, в случае неудачи –1

Схема работы с сокетами с установлением соединения

Мы рассмотрели все основные функции работы с сокетами. Обобщая изложенное, можно изобразить общую схему работы с сокетами с установлением соединения в следующем виде

Схема работы с сокетами без установления соединения

Общая схема работы с сокетами без предварительного установления соединения проще