Как мы знаем, fd
(дескриптор файла, точнее int
) относится к процессу, то есть один и тот же файл, открытый в разных процессах, может иметь разные fd
.
А я так и думал, должно быть для розеток.
Но при чтении исходного кода nginx я обнаружил, что он использует сокеты для связи между процессами:
if (socketpair(AF_UNIX, SOCK_STREAM, 0, ngx_processes[s].channel) == -1)
{
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"socketpair() failed while spawning \"%s\"", name);
return NGX_INVALID_PID;
}
Здесь ngx_processes[s].channel[0]
отправляется другому процессу.
Но как я сказал fd
для каждого процесса, как он может гарантировать, что один и тот же int
будет указывать на один и тот же сокет?
UPDATE
Почему сейчас вопрос в том, как это работает (это то же самое, что использует nginx)?
http://swtch.com/usr/local/plan9/src/lib9/sendfd.c