2

サーバーソケットがPythonで正常にシャットダウンされたかどうかを判断しようとしています。

プログラムはファイルを受信しました。送信中にエラーが発生した場合は、ファイルを削除する必要があります。

最初の提案は、ファイルの長さまたはいくつかの終了データをクライアントに送信させて、ファイル転送が完了したことをサーバーに通知することです。
残念ながら、クライアントを変更することはできません。ファイルをraw tcpにダンプするだけで、それについては何もできません。ですから、「でも、変更できれば」や「プロトコルに欠陥がある」ということはありません。私はプロトコルを作成しなかったので、対処する必要があります。

スクリプトはOSXとLinuxの両方で機能するはずなので、epollは使用できません。

助言がありますか?

どのエラーが発生したかは気にせず、エラーが発生しただけだと付け加えることができます。

4

2 に答える 2

1

相手側がデータの送信を終了した場合、書き込みのためにソケットをシャットダウン (2) する必要があります。次に、多重化ループで、ソケットが書き込みのためにシャットダウンされているか、リモートエンドによって閉じられているか (書き込みと読み取り) を確認できます。これは正常なシャットダウンであり、select/poll/kqueue などを使用できます。

クライアントがそれを行わず、終了文字を送信せず、長さまたはチェックサムを送信しない場合、それは難しく見えます。

プロトコルに関する詳細を削除する必要があります。クライアントは、ファイルを送信するためだけに TCP ソケットを開きますか? 転送が完了したらソケットを閉じますか?

最悪の場合、ファイルの整合性をチェックする必要があります。形式がわかっている場合は、実行時にチェックするか、cron タブでクリーニングを行うことができます。それができない場合、解決策を見つけるのは難しいでしょう。幸運を...

于 2011-07-06T00:56:38.627 に答える
0

ソケットのタイムアウトを 1 分などの低い値に設定するだけで、recv 呼び出しがスローされ、1 分後に例外が発生することがわかりました。

于 2011-07-06T19:54:46.793 に答える