2010-11-22 21 views
1

こんにちは、私は/ recvメッセージを送信するためにTCP接続を使用します。質問は、私は多くのメッセージを送信し、待ち時間を測定したいです。したがって、私はすべてのメッセージが送信された後に受信したくない。しかし、私が時間内に入ってくるメッセージを処理しなければ、プログラムは予期せぬ結果を得ます。 msgを送信するプログラムをブロックせずにrecv()を処理できる方法はありますか? コメントをいただければ幸いです。tcpメッセージ通信

答えて

2

TCPを使用した測定レイテンシは、TCPが必然的ににはのレイテンシ(Nagle's algorithmを参照)を導入するため、最適ではない可能性があります。 TCPはバイトストリームとして解釈され、「メッセージ」という概念も明確に定義されていません。

ソケットをnon-blockingに設定すると、データがない場合にすぐにrecv()が返されます。ポーリングでCPUを無駄にしたくない場合は、代わりにselect()を使用して、ソケットに読み取り可能なデータがあるかどうかを検出できます。

+0

+1。 UDPはここでより良い選択となるでしょう。おそらく、OQは単に「ソケット」の同義語として「TCP」を使用していました。 –

+0

お返事ありがとうございます。特にtcp接続のレイテンシを測定しています。 – leo

0

select()を使用して、受信データが利用可能かどうかをテストできます。

0

私がここで言及していない1つのオプションは、受信のためにスピアスレッドを使用することです。そうすれば、他のスレッドの送信ロジックに干渉することなく、単純なダムブロック待機を行うことができます。

関連する問題