Windows 7 で WinInet の問題を確認しました。これは非同期で見られます。モードでは、InternetReadFile()がERROR_IO_PENDINGを返したときに、 INTERNET_STATUS_RESPONSE_RECEIVEDイベントをトリガーしないことがあります。Wireshark を使用してトラフィックをキャプチャしたので、完全な応答を正しく受信していると確信しています。しかし、WinInet を使用するアプリケーションはそうではありません。この問題は WinInet API の使用方法に関連しているのではないかと疑っていましたが、非同期でも問題を再現できることが判明しました。MSDN の WinInet の例。( http://msdn.microsoft.com/en-us/library/windows/desktop/cc185684(v=vs.85).aspx )
テスト サーバーに接続するように例を変更します。テスト サーバーは 20000 バイトのデータを送信しているだけです。この動作は、Win 7 (WinInet dll バージョン WIN7_IE9_RTM.110308-0330) でのみ見られます。サーバーについて特別なことは何もないことを示すためだけに、Python で実際にテストしているサーバー アプリケーションを次に示します。
import time
from socket import *
ADDR = ("", 80)
BUFSIZE = 1024
serversock = socket(AF_INET, SOCK_STREAM)
serversock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
serversock.bind(ADDR)
serversock.listen(5)
t0 = time.time()
while 1:
print 'waiting for connection. previous transaction takes %0.3f secs' % (time.time()-t0)
t0 = time.time()
clientsock, addr = serversock.accept()
print '...connected from:', addr
data = clientsock.recv(BUFSIZE)
print 'recv data:' + repr(data)
send_data = "A" * 20482
send_data += "supo\r\n\r\n"
clientsock.send(send_data)
よろしく、