正如我們所知道的fd
(文件描述符,確切地說是一個int
)是每個進程,也就是說,在不同進程中打開的相同文件可能會有不同的fd
。因此socketpair()生成的套接字可用於不同的進程嗎?
而我認爲應該是插座。
但是看完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
您的代碼片段不包含任何關於「將fd發送到另一個進程」的內容,因此無法回答。答案取決於你是否在分離流程之間轉移fds或使用一些hack。 – 2011-06-02 12:42:58
@R ..,上面的代碼不包含將'socketfd'發送到其他進程的邏輯。你的意思是,如果使用分叉,可以在進程間使用相同的fd? – 2011-06-02 12:45:57
因此,您的問題實際上無法以其當前形式回答。 – 2011-06-02 12:46:47