2014-10-06 7 views
3

Когда процесс записывает в сокет, ядро ​​сначала сохраняет эти данные во внутреннем буфере, прежде чем нажимать его. Теперь, если процесс завершает (до закрытия сокета) данные, находящиеся в буфере, ядро ​​не беспокоится о том, чтобы вымыть их.Закрытие гнезда перед завершением

Так что мой вопрос:

Когда процесс закрывает сокет, а затем умирает сразу, мы в ситуации, когда мы могли бы потерять данные в буфере? Является ли ядро ​​немедленно выгружать буфер при вызове закрытого сокета?

ответ

1

От manpage for close:

Если fildes относится к розетке, close() должно вызывать сокет быть уничтожены. Если сокет находится в режиме соединения, а параметр SO_LINGER установлен для сокета с ненулевым временем задержки, а сокет имеет неперехваченные данные, то close() должен блокироваться до текущего интервала задержки до тех пор, пока все данные не будут переданы.

+0

Удивительный! Благодаря! Честно говоря, не было такого объяснения в manpages .... Мой плохой – Kam

+1

Ссылка на POSIX: http://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html @Kam – alk

Смежные вопросы