2012-09-27 13 views
5

非ブロッキングソケットを使用してイベントドリブンサーバー(要求応答プロトコル - HTTPのような)を作成しました。私は、数秒ごとに個別のチャンクでリクエストを送信するクライアントを記述して部分的な読み取りをテストしました。 部分書き込みをテストするにはどうすればよいですか?つまり、100バイトを書き込んだ後、1​​0バイトしか書き込まれていないコールリターンを送信する必要があります。ネットワークサーバーをテストするために部分書き込みを強制する方法

私はperlベースのクライアントを作成しています。これはSSLを介していますが、この質問の目的のために、私はTCP上の部分的な書き込みで大丈夫です。

答えて

0

TCPフロー制御を使用する - クライアントをソケットから読み取る速度が非常に遅くなり、送信側(サーバー)ソケット送信バッファがデータでいっぱいになるようにします。これは、バッファの一部のみ出力を送信するべき

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

2

は、出力バッファのサイズを小さくするようにしてください。

0

非常に多くのデータをすばやく書き込みます。

(月により示唆されるように)あなた自身の送信機能を作成

例えば、出力バッファが非常に小さい

または

を作ります

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への呼び出しをハッカーコードからの通常のsendおよびdelete mysendに戻します。

関連する問題