Что будет, если сделать запись в сокет и сразу закрыть его
write(fd, buf, buf_size);
close(fd);
write()
) данные копируются в буфер ядра (не отправляются по сети). Что произойдет при вызове close()
?
- он вернется сразу, а ядро сначала передаст остаток буфера по сети, затем отправит fin
- подождет, пока ядро передаст данные, затем отправит fin и вернется,
- отбросит данные в буфере, сразу отправит fin и завершит вызов
close()
P.S. Насколько я понимаю, блокирующий сокет или нет никакой разницы при записи не будет (write()
по любому вернется сразу, скопировав максимально возможное количество данных в ядерный буфер, а close()
так вообще безразлична блокируемость сокета).