0
閉じた接続とは、もう一方の端が優雅にそれを閉じたことを意味します。 返品値としてwrite()
から0を受け取ることが期待されますが、間違っていれば私を修正してください。C - 信号(SIGPIPE、SIG_IGN)を使用したときの閉じたtcp接続へのwrite()の影響。
閉じた接続とは、もう一方の端が優雅にそれを閉じたことを意味します。 返品値としてwrite()
から0を受け取ることが期待されますが、間違っていれば私を修正してください。C - 信号(SIGPIPE、SIG_IGN)を使用したときの閉じたtcp接続へのwrite()の影響。
正確な動作は、基盤となるOSに依存してもよいが、一般的に、あなたはすなわち、write
は-1
を返し、(例えばECONNRESET
に)errno
を設定し、エラーを取得する必要があります。
私は自分のLinuxマシンでそれをテストしたところ、値> 0を返します。 (つまり、書き込んだと思われる文字数) –
少なくとももう一度書くことができるのは正常です。場合によってはさらに多くを得ることができます。私のローカルマシンに接続している古いBSDシステムでは、1つの書き込みが成功し、-1にerrnoに 'EPIPE'が設定されます。より現代的なLinuxボックスでは、同じことが起こります。これは、送信者が受信者がなくなったことを「見る」ために、1つの余分なTCP往復を要するからです。 'SO_KEEPALIVE'を設定すると、それ以前の発見が行われるはずですが、時間がかかることがあります(RFC-1122には少なくとも2時間かかる)。 – torek