2つのプロセス間の接続を確立しました。
netstat -tpn | grep 9999
tcp 0 0 127.0.0.1:*58728* 127.0.0.1:9999 ESTABLISHED 17366/*my_app.bin*
このプロセスを終了した後も
1.接続はまだESTABLISHED
生きています
。 2. ポートが58728
まだ netstat テーブルにあり、異なるプロセス名があることを確認しました。
tcp 0 0 127.0.0.1:*58728* 127.0.0.1:9999 ESTABLISHED 19645/*udhcpc*
どうやって?
答え1
問題は、udhcpc
プロセスが私のプロセスで作成されることですmy_app.bin
。
このビルドでは、生成されたプロセスが を継承するため、my_app.bin
ソケットを閉じてもmy_app.bin
で閉じませんudhcpc
。
解決策:
O_CLOEXEC
ソケットを開くときに使用するか、後でfcntl()
フラグと一緒に使用します。FD_CLOEXEC
- 生成されたプロセスで、関係のない開いているファイル記述子をすべて閉じます。
私の場合は制御できないので、udhcpc
オプション番号を使用する必要があります1
。