5

非ブロッキングソケットを使用して、イベント駆動型サーバー (要求応答プロトコル - HTTP のようなもの) を作成しました。数秒ごとに個別のチャンクでリクエストを送信するクライアントを作成して、部分読み取りをテストしました。部分的な書き込みをテストするにはどうすればよいですか。つまり、100 バイトを書き込み、10 バイトだけを書き込んでコール リターンを送信する必要があります。

私は perl ベースのクライアントを書いています。これは SSL 経由ですが、この質問の目的上、TCP での部分的な書き込みは問題ありません。

4

3 に答える 3

2

出力バッファのサイズを小さくしてみてください:

 err = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, 1)

これにより、送信出力はバッファの一部のみになります。

于 2012-09-27T18:47:48.683 に答える
0

大量のデータを非常に高速に書き込みます。

出力バッファを非常に小さくします(Janの提案に従って)

また

独自の送信機能を作成する

例えば

ssize_t mysend(int sockfd, const void *buf, size_t len, int flags)
{
    int shortlen = len - 100 > 0 ? len - 100; len
    return send(sockfd, buf, shortlen, flags);
}

< 100 バイトを送信する場合を除き、常に 100 バイト短く送信します。それ以外の場合は、可能であれば、指定したものを送信します。部分送信処理が正しく機能していることを確認したら、mysend への呼び出しを通常の送信に戻し、ハッカリー コードから mysend を削除します。

于 2013-01-18T01:22:13.373 に答える
0

TCP フロー制御を使用する - クライアントがソケットから非常にゆっくりと読み取るようにして、送信側 (サーバー) ソケットの送信バッファーがデータでいっぱいになるようにします。

于 2012-09-27T17:51:12.010 に答える