Закрывание сокетов
Когда взаимодействующие модули решают прекратить передачу данных и
закрыть сеанс связи, они обмениваются трехсторонним рукопожатием с
сегментами, содержащими установленный бит "От отправителя больше нет
данных" (этот бит еще называется FIN бит).
Если сокет больше не используется, процесс может закрыть его с помощью
функции close, вызвав ее с соответствующим дескриптором сокета:
close(s);
Если данные были ассоциированы с сокетом, обещающим доставку (сокет
типа stream), система будет пытаться осуществить передачу этих данных. Тем не
менее, по истечении довольно таки длительного промежутка времени, если данные
все еще не доставлены, они будут отброшены. Если пользовательский процесс
желает прекратить любую передачу данных, он может сделать это с помощью
вызова shutdown на данном сокете для его закрытия. Вызов shutdown вызывает
"моментальное" отбрасывание всех стоящих в очереди данных. Формат вызова
следующий:
shutdown(s, how);
где how имеет одно из следующих значений: