1

write(2) を使用してノンブロッキング TCP ソケットに書き込まれたメッセージの小さなセットが、送信元インターフェイスでは見られず、宛先でも受信されません。

何が問題なのですか?アプリケーションがこれを検出して再試行できる方法はありますか?

while (len > 0) {
    res = write (c->sock_fd, tcp_buf, len);
    if (res < 0) {
      switch (errno) {
        case EAGAIN:
        case EINTR:
        <handle case>
        break;
        default:
        <close connection>
      }
    }
    else {
      len -= res;
    }
}     
4

3 に答える 3

1

write() は、書き込まれたバイト数を返します。これは、送信したバイト数よりも少ない場合があり、0 でさえあります! これを確認して、ドロップされたものを再送信してください(NICのバッファスペースが不足しているためなど)

于 2009-02-25T08:17:51.583 に答える
1

TCP_NODELAYオプションと TCP 送信バッファの性質について調べたいと考えています。

于 2009-05-25T20:48:36.757 に答える