#linux #sockets #network-programming
Вопрос:
Как мы знаем, мы можем использовать setsocketopt
api для изменения размера буфера сокета.
Поскольку сокет fd создается пользовательским процессом, занимает ли он адрес памяти процесса, например, верхнее пространство ядра 1G в каждом виртуальном адресе 4G процесса для 32-разрядной машины?
И когда сокет закрыт, кажется, что fd не освобождается до тех пор, пока не пройдет 2 МС, что приведет к тому, что буфер будет существовать дольше.
Комментарии:
1. Буферы сокетов находятся в памяти ядра, а не в памяти процесса. И когда сокет находится в
TIME-WAIT
состоянии, ему не нужны никакие буферы сокетов, поэтому я думаю, что они отбрасываются.2. Я думаю, что Unix и Linux было бы лучше спросить об этом, это никак не влияет на сетевое программирование. Речь идет о внутреннем дизайне сетевого стека.