2

カスタムビルドの Web サーバーコードがあります。これは、evnet モジュールを使用して作成されました。

リモートクライアントから要求されたときにメッセージの長さをカットするようです。しかし、同じマシンで使用すると、完全なメッセージが配信されるようです。問題が何であるか、またはそれを診断する方法がわかりません。Web ブラウザーを使用してテストしたところcurlnc. リモート クライアントからの要求時に、完全な長さのメッセージが配信されることはありませんでした。

これは、まだ問題が発生している Web サーバーの簡易版ですPython 2.7.1を使用してUbuntu 11.04でこれを行っています

4

1 に答える 1

1

send()大量のデータを送信するために呼び出した直後にソケットを閉じています。データがまだバッファリングされている場合、ソケットを閉じると破棄されます。

代わりに、ソケットを呼び出しshutdown(SHUT_WR)て、送信が完了したことをリモート エンドに通知する必要があります。これは、TCP「ハーフクローズ」と呼ばれます。それに応じて、もう一方の端はその側を閉じ、ソケットが読み取り不能になったという通知を受け取ります。その後、ソケット ハンドルを閉じる必要があります。

于 2012-08-19T19:46:27.037 に答える