3

送信する前にピアがソケットをシャットダウン/クローズしたかどうかを検出する直接コマンドはありますか?

私はこれをします:

int sendResult = send( mySD, bufferPtr, numberToSend, MSG_NOSIGNAL );

send()メッセージを喜んで受け入れて送信しているように見えます(正の戻り値)。次にメッセージを送信しようとしたときにのみエラーが返されます。つまり、警告1のメッセージが遅すぎます。

はい、select()事前に使用していますが、ピアがシャットダウンしても1を返します。

recv()回避策として、を呼び出す直前に0バイトの読み取りを実行できます。これにより、send()「接続OK」(-1)または「ピアシャットダウン」(0)が通知され、ほとんどの作業が実行されます。

int readTest = recv( mySD, NULL, 0, MSG_DONTWAIT | MSG_PEEK );

しかし、セマンティックの観点からは、実際に送信したいときに読むのは「間違っている」と感じます。実際に必要なのは単なるテストです。では、「ソケットステータス」など、必要なものを直接把握できるコマンドはありますか?社内で使うのはどういうこと?recv()

4

2 に答える 2

4

プログラムは選択ベースであるため、読み取りと書き込みの両方のfdセット用にソケットを登録すると思います。はいの場合、読み取りfdセットのselect returnを取得し、最終的に「0」を受信して​​ソケットを閉じます。

于 2012-09-06T12:02:00.573 に答える
0

ソケットの上のプロトコルがピンポンメカニズムを実装する理由があると思いますか?

最高、ピーター

于 2012-09-06T12:02:33.477 に答える