我们有一个用Delphi 7编写的客户端服务器应用程序,使用Winsock TCustomWinSocket作为两者之间的派生套接字连接。服务器位于Server 2008 R2 Standard SP1 64位计算机上,客户端运行在Windows 8 Pro 64位PC上。
应用程序基本上是创建与服务器的连接,工作正常,然后将任何更新或丢失的文件下载到客户端。此应用程序在所有版本的Windows中都运行良好,但在升级到Windows 8之后,客户端通过第一次文件下载在服务器上出现异步错误10053的各个阶段断开连接,它似乎永远不会发生在每次的同一点和在非常罕见的情况下,文件将下载,然后在下一个文件上失败。
只是想知道是否有其他人有类似的东西,我们尝试过权限更改,不同的兼容性设置,我们尝试在服务器和客户端套接字上添加keep alive和time out而没有任何运气: -
setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_RCVTIMEO, PChar(@TimeOut), sizeof(TimeOut));
setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_SNDTIMEO, PChar(@TimeOut), sizeof(TimeOut));
setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_KEEPALIVE, PAnsiChar(@OptVal), sizeOf(OptVal))
任何帮助都会非常感谢,提前谢谢。
这些是连接过程使用的声明和返回值分析
var OptVal,TimeOut: DWORD;
begin
TimeOut:=50000;
OptVal := 1;
if setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_RCVTIMEO, PChar(@TimeOut), sizeof(TimeOut)) = SOCKET_ERROR then
raise Exception.Create(Format('WinSock Error %d', [WSAGetLastError()]));
if setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_SNDTIMEO, PChar(@TimeOut), sizeof(TimeOut)) = SOCKET_ERROR then
raise Exception.Create(Format('WinSock Error %d', [WSAGetLastError()]));
if setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_KEEPALIVE, PAnsiChar(@OptVal), SizeOf(OptVal)) = SOCKET_ERROR then
raise Exception.Create(Format('WinSock Error %d', [WSAGetLastError()]));
accvmClientLoader.ValidateContexts;
end;