チャット プログラムを作成していますが、サーバーに対してデータを送信するときに、send() 関数がデータを送信するのに時間がかかることがありますか?
ここに私の問題があります: 私は Linux 2.6 を epoll で使用しています。サーバーはシングルスレッドです send() がブロックされると、サーバー上の他のすべてのアクティビティが停止します。たとえば、tcp パケットに対して ACK 応答を長時間送信しない非常に遅いクライアントがある場合、送信機能はすぐに移動するか、クライアントを長時間待機します。私が望んでいないのは、単一または少数の遅いクライアントがチャット サーバーで遅延を引き起こすことです。
私が欲しいのは、 send() を非ブロックにして、非常に迅速に返すことです。すべてのデータが送信されない場合は、送信された量が返されるだけで、それをバッファから削除し、すべてのデータが送信されるまで次回のサービスで送信を続けます。基本的に、低速または応答のないクライアントで長時間送信をブロックしたくありません。