誰かが分を持っているなら、私は少し助けが必要です。IO完了ポートを使用してWebサーバーを作成しましたが、大きなファイルを送信するのに問題があります。Webページは正常にロードされているように見えますが、大きなファイル転送中に、WSASend()は数分後に失敗し、「指定されたネットワーク名は使用できなくなりました」というエラーが表示されます。
現在、重複する操作が失敗すると、サーバーは関連付けられた接続を閉じるだけです。これは正しいことですか?または、ソケットを閉じる前に、失敗した重複操作を数回再試行する必要がありますか?私はtcp/streamソケットを使用しています。
(修正済み)WSARecvからランダムな0バイトパケットのように見えるものも受信しています。これをどうすればいいのか、問題が関連しているかどうかわかりません。(/修正済み)
助けてくれてありがとう
編集:サーバーが接続を適切に処理し、はるかに包括的なログを持っているので、Lenは正しいようです。クライアントが何らかの理由で接続を閉じています。
ログ:
Initializing Windows Sockets...
Forwarding port 80...
Starting server...
Waiting for incoming connections...
Socket 1128: Client connected.
Socket 1128: Request received
Socket 1128: Sent response
Socket 1128: Error 64: SendChunk() failed. //WSASend()
Socket 1128: Closing connection - GetQueueCompletionStatus == FALSE
問題は、なぜクライアントが接続を閉じるのかということです。発生するまでに2〜5分かかります。バッファサイズを送信ごとに4098バイトに減らし、最初のチャンクが完了したときにのみ次のチャンクを送信します。
これについてのアイデアをありがとう。
ps再試行機能を実装しただけでも、失敗した重複IO操作を5回再試行してから、あきらめます....それでも運がない=(