Этот вопрос больше для моего собственного образования, чем для решения какой-либо проблемы.
Я использую VPS на linode с lighttpd и PHP 5.3.13 через fast-cgi.
Когда я перечисляю интернет-соединения, я получаю это странное существо:
# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
php-cgi 25095 lighttpd 13u IPv6 75194 0t0 UDP myhostname.com:48192->resolver2.fremont.linode.com:domain
Я никогда раньше не видел UDP "соединение"? Может ли кто-нибудь объяснить, что такое этот тип UDP-соединения - разве UDP не протокол без подключения? Это как-то связано с IPv6? (Я установил IPv6-адрес локального DNS-преобразователя Linode по умолчанию, а не IPv4-адрес.)
Во-вторых, эта «связь» прижилась. Разве все соединения php не должны быть закрыты, когда процесс fastcgi завершит свою задачу? На странице состояния Lighttpd не отображаются открытые соединения и открытые запросы fastcgi.
РАЗЪЯСНЕНИЕ:
В частности, мне было интересно, почему lsof перечисляет здесь назначение сокета UDP, как это обычно бывает с TCP-соединениями. Вот чего я раньше не видел. Обычно UDP-соединения выглядят так:
# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ntpd 1624 ntp 18u IPv6 2819 0t0 UDP myhostname.com:ntp
... без указания пункта назначения.
Судя по всему, есть режим UDP "с установлением соединения". Вы вызываете connect () в сокете вместо bind (), что позволяет использовать send () и receive () (вызовы, ориентированные на соединение) вместо sendto () и receivefrm (). Это НЕ будет поддерживать соединение открытым, но оно выделит порт для соединения и сохранит его активным ... отсюда и название - ориентированный на соединение. (из Вот)
Я думаю, что lsof отображает назначение UDP-соединений только для этих UDP-сокетов, ориентированных на соединение. Это правильно?
lsof показывает UDP-сокет (который указывает такую информацию, как исходный порт, адрес назначения и порт назначения), который php-cgi использует для взаимодействия с DNS-сервером (а не «соединение»). Пока сокет остается открытым, он будет отображаться в вашем выводе lsof.