私はJenkinsのOS Xでポート割り当ての問題をデバッグしようとしていましたが、Netcatで特定のポートをリッスンすると奇妙な結果に繋がりました。OS Xが同じTCPポートで2回リッスンできるのはなぜですか?
OS X 10.8.2の端末において:
$ uname -rs
Darwin 12.2.1
$ nc -l 54321
第2の端子に:
$ nc -l 54321
第3端子に、lsof
が両方のインスタンスことを示します同じポートにバインドされました:
$ lsof -i | grep 54321
nc 70706 chris 3u IPv4 0x55618c024692f4d1 0t0 TCP *:54321 (LISTEN)
nc 70769 chris 3u IPv4 0x55618c0232cb8661 0t0 TCP *:54321 (LISTEN)
Linuxの
:
まずターミナル:
$ uname -rs
Linux 3.2.0-34-generic
$ nc -l 54321
第二ターミナル:
$ nc -l 54321
nc: Address already in use
なぜOS Xは、アドレスがすでにあることを報告しません。つかいます?
'lsof -i'出力の構文はわかりませんが、' 0x55618c024692f4d1'と '0x55618c0232cb8661'は何ですか? IPアドレスの場合は、リスナーが特定のIPアドレスにバインドされていて、「任意の」アドレスにバインドされていないためです。 – CodeCaster
意味のないメモリアドレスです。彼らが持つ唯一の目的は、これらが2つの異なるソケットであることを識別することです(例えば、 'fork()'や 'dup()'の結果ではない)。 – duskwuff
'lsof -i'を実行すると、そのフィールドには27個の一意の値(" DEVICE ")が与えられます。私はそれがメモリアドレスだと信じています。最後の列は、ソケットが '*'に束縛されていることを示しています。 –