Завершение работы с сокетом.

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

# include <sys/types.h>

# include <sys/socket.h>

int shutdown(int sockfd, int mode);

Помимо дескриптора сокета, ей передается целое число, которое определяет режим закрытия соединения. Если mode=0, то сокет закрывается для чтения, при этом все дальнейшие попытки чтения будут возвращать EOF. Если mode=1, то сокет закрывается для записи, и при осуществлении в дальнейшем попытки передать данные будет выдан кода неудачного завершения (-1). Если mode=2, то сокет закрывается и для чтения, и для записи.

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

Резюме: общая схема работы с сокетами.

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

Завершение работы с сокетом. - student2.ru

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

БИЛЕТ 44

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

Завершение работы с сокетом. - student2.ru

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

Билет 46. Основные правила работы с файлами. Типовые программные интерфейсы работы с файлами.

Файловая система (ФС) - часть операционной системы, представляющая собой совокупность организованных наборов данных, хранящихся на внешних запоминающих устройствах, и программных средств, гарантирующих именованный доступ к этим данным и их защиту

Возможности предоставляемые ФС определяют эксплутационные качества ФС. От оптимальности организации зависит область применимости ФС.

ФС – компонент ОС обеспечивающий именованный доступ к данным. Данные называются файлами, их имена - именами файлов.

Ранее работа с данными осуществлялась через координаты их на внешних носителях. Это было неудобно, т.к. надо было помнить о местонахождении данных, перемещение программы с одного носителя на другой тоже вызывало трудности. Если возникала потребность менять входные данные в программе, то это тоже было не легко.

ФС совершила революцию. Появилась возможность ассоциировать с совокупностью данных некоторое имя и осуществлять доступ к данным через указатель имени.

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

Наши рекомендации