занимает ли буфер сокета адрес памяти процесса?

#linux #sockets #network-programming

Вопрос:

Как мы знаем, мы можем использовать setsocketopt api для изменения размера буфера сокета.

Поскольку сокет fd создается пользовательским процессом, занимает ли он адрес памяти процесса, например, верхнее пространство ядра 1G в каждом виртуальном адресе 4G процесса для 32-разрядной машины?

И когда сокет закрыт, кажется, что fd не освобождается до тех пор, пока не пройдет 2 МС, что приведет к тому, что буфер будет существовать дольше.

Комментарии:

1. Буферы сокетов находятся в памяти ядра, а не в памяти процесса. И когда сокет находится в TIME-WAIT состоянии, ему не нужны никакие буферы сокетов, поэтому я думаю, что они отбрасываются.

2. Я думаю, что Unix и Linux было бы лучше спросить об этом, это никак не влияет на сетевое программирование. Речь идет о внутреннем дизайне сетевого стека.