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);
}
フォークを開始:私は "ランチャー" 再起動afrer、しかし
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);
}
を、 「Launher:アドレスをバインドできません」というメッセージが表示されます。
"lsof -i UDP"でチェックしたところ、子プロセスがこのポートをリッスンしているように見えるので、再度バインドすることはできません。 同じバインドされたソケットを使用する子プロセスを防ぐことはできますか?私は、「ファイルディスクリプタ」について何かを読んで、私はそれを防ぐ方法:(解決のための@Dietrichエップへ
子プロセスができます柱すべてで、そのソケットが必要ですstは 'SOCK_CLOEXEC'を使用しますか? –
いいえ、彼らはそれを必要としません。しかし、どこでSOCK_CLOEXECフラグを正確に設定すべきですか?親プロセスまたは子プロセスでは? – Mona
Linuxの場合、 'man 2 socket'を参照してください:http://linux.die.net/man/2/socket –