我们在Windows7中观察到WinInet问题。我们在异步中看到了这一点。模式,当InternetReadFile()返回错误挂起时,有时它不会触发INTERNET状态响应“已接收”事件。我确信我们收到的全部回复是正确的,因为我使用了Wireshark来捕捉流量。但使用WinInet的应用程序不是。我们怀疑这个问题与我们使用wininetapi的方式有关,然而,事实证明我们甚至可以用异步来重现这个问题。MSDN上的WinInet示例。(http://msdn.microsoft.com/en-us/library/windows/desktop/cc185684(v=vs.85).aspx)
我更改示例以连接到我的测试服务器。测试服务器只发送20000字节的数据,仅此而已。我们只在WIN7上看到这种行为(WinInet dll版本WIN7\u IE9\u 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)
谨致问候