如何缩短SocketConnection的连接超时时间?(200分)

  • 主题发起人 主题发起人 dq
  • 开始时间 开始时间
to zengr:呵呵,没事儿!
to 一刀兄:死马当活马医,还是帖一下吧。
to zjlcc:
这个问题是帮我同事问的,他说那样也不行。我对socket不熟悉,看不出个所以然来。
to all:有份好心情什么都好说!
 
这是我修改的TCustomWinSocket.DoOpen过程,基本原理乃是以前自网上获得,
我针对Delphi的控件特性作了修改,如有问题,概不负责 ^_^
procedure TCustomWinSocket.DoOpen;
var
val:integer;
rc:integer;
ulB:U_LONG;
Time:timeval;
FdSet:TFDset;
TimeOut:integer;
begin
do
SetASyncStyles;
Event(Self, seConnecting);
if FAsyncStyles=[] then
begin
Timeout:=8000;
rc:=0;
ulB := 1;
ioctlsocket(FSocket, FIONBIO, ulB);
if WinSock.connect(FSocket, FAddr, SizeOf(FAddr))=SOCKET_ERROR then
begin
if (WSAGetLastError() = WSAEWOULDBLOCK) then
begin

FD_ZERO(FdSet);
FD_SET(FSocket, FdSet);
Time.tv_sec := timeout div 1000;
Time.tv_usec := (timeout mod 1000) * 1000;
rc := select(0, nil, @FdSet, nil, @Time);
end;
end;
ulB := 0;
ioctlsocket(FSocket, FIONBIO, ulB);
if rc=0 then
begin
WSASetLastError(10065);
CheckSocketResult(SOCKET_ERROR,'connect');
end;
end
else
CheckSocketResult(WinSock.connect(FSocket, FAddr, SizeOf(FAddr)),'connect');
FLookupState := lsIdle;
if not (asConnect in FAsyncStyles) then
begin
FConnected := FSocket <> INVALID_SOCKET;
Event(Self, seConnect);
end;
end;
 
城头铁鼓声犹震,匣里金刀血未干!
多谢各位!
 
多人接受答案了。
 
对菜鸟来说太高深了,只有瞪眼的份了!
哎!!!
 
我现在也碰上了同样的问题,我是用D6的,
可上面的代码是什么意思,谁能解是一下。
 
后退
顶部