0
我有一個監聽端口X中的 「啓動器」 的程序,然後開始用叉子)其他processess(C++如何防止Linux上fork()之後的子進程綁定端口?
signal(SIGCHLD, SIG_IGN);
a.sin_port=htons(atoi(argv[1]));
if(bind(os,(struct sockaddr *)&a,sizeof(a)) == -1) {
if(Debug){
printf("Launher: Can't bind our address (%s)\n", argv[1]);
}
exit(1);
}
叉:
int pid = fork();
if (pid == 0)
{
execl("udp-proxy/udp_proxy","udp-proxy/udp_proxy",listenPort.c_str(),listenClient.c_str(),listenHost.c_str(),nullptr);
}
然而,afrer我重啓了 「發射」,它會顯示一條消息:「Launher:無法綁定我們的地址」。
我用「lsof -i UDP」進行了檢查,似乎子進程正在監聽這個端口,所以它不能被再次綁定。 是否可以使用相同的綁定套接字來阻止子進程?我讀一些有關「文件描述符」,但我不知道如何阻止它:(
執行子進程需要在所有的插座你能舉? st使用'SOCK_CLOEXEC'? –
不,他們不需要它。但我應該在哪裏設置SOCK_CLOEXEC標誌?在父母或孩子的過程中? – Mona
在Linux上,請參閱'man 2 socket':http://linux.die.net/man/2/socket –