Windows 8客户端中的Delphi 7 Winsock异步错误10053

时间:2013-07-09 14:06:49

标签: delphi delphi-7 winsock

我们有一个用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;

0 个答案:

没有答案