2017-05-23 12 views
0

ソケットのwrite()呼び出しは失敗しましたが、poll()はエラーを検出できませんか? 書き込みが失敗する可能性がありますが、poll()システムコールによってエラーとはみなされないエラーのカテゴリはありますか?ネットワークwrite()は失敗する可能性がありますが、poll()は検出されません

ソケットの監視を続けているディスパッチャスレッドがあり、ソケットエラーの検出と処理には という責任があります。 私は、ディスパッチャスレッドによって通知されたときにソケット上で実際に読み書きを行うワーカースレッドを持っています。 ワーカースレッドによるwrite()呼び出しは失敗しますが、ディスパッチャスレッドによるpoll()システムコールはエラーを返すことはありません。どのようにこれが起こることができます!

+0

どのerrnoが失敗するのですか? –

答えて

3

write()に失敗した場合は-1を返し、errnoと設定します。 これはエラーの唯一の徴候です。そのエラーを別の場所に送信する必要がある場合は、それを自分で行う必要があります。

poll()は、クローズドTCP接続のように、このエラーを引き起こす可能性がある特定の例外条件を個別に検出します。これは、失敗した「検出」と同じではありません。これらのエラーは検出されず、検出できません。

+0

poll()によっても検出されるソケットエラーのためだけにwrite()が失敗しないでしょうか? – siri

+1

@siriすべてのエラーではありません。例:ソケットが非ブロックとして設定されている場合、バッファがいっぱいになると、EAGAINが返されます。または、ソケットがUDPの場合、EHOSTUNREACHのようなエラーは、ネットワーク状態の変化に伴って変化する可能性があります。 – duskwuff

+0

'EINTR'(割り込みシグナルハンドラがインストールされている場合)は' poll'が見ることができない別のエラーとなります。 –

関連する問題