3

を使用して作成されたバインドおよび接続された (バインドされていないピアに) ソケットの場合、 (フラグが設定されます)socket(AF_UNIX, SOCK_SEQPACKET, 0)を使用せずに、リモート エンドがハングアップしたことを検出する方法はありますか (何らかの理由で、書き込み fd セットに表示されます) )など?pollPOLLHUPselect

とは異なりSOCK_STREAM、長さ 0 のペイロードは有効であり、ストリームの最後と区別できません (私が知る限り、リモート エンドがorrecvmsgを呼び出したソケットを呼び出すと、長さ 0 のチャンクを取得し続けます)。また、接続の終了を知らせる既知の (私にとって) フラグはありません。Linux カーネル ソース ( ) で確認できる唯一のことは、ソケットが接続されていない場合にカーネルが返され、その後、 と同じ作業を実行していることです。shutdownclosestruct msghdrnet/unix/af_unix.c:unix_seqpacket_recvmsg-ENOTCONNSOCK_DGRAM

のフラグを確認する必要があるため、 、 などでrecvmsgはなく使用することが重要であることに注意してください。recvrecvfromMSG_TRUNC

4

0 に答える 0