[fpc-pascal] fphttclient, no way to specify a connect timeout

Dimitrios Chr. Ioannidis d.ioannidis at nephelae.eu
Fri Feb 23 18:51:24 CET 2018


Hi,

Στις 23/2/2018 5:17 μμ, ο Michael Van Canneyt έγραψε:
>
>
> On Fri, 23 Feb 2018, Luca Olivetti wrote:
>
>> Hello,
>>
>> the TFpHttpClient has an IoTimeout property, which in turn sets the 
>> IOTimeout of its FSocket (TInetSocket), however there's no way to set 
>> a connection timeout.
>> I see that even overriding the SocketHandler wouldn't change that, 
>> since it's connect is only called *after* the fpconnect call succeeds.
>> Also, I see no way to interrupt a pending connect from another thread.
>>
< snip >
> This is on my todo list. Unfortunately, the way sockets work, this means
> putting the socket in non-blocking mode, call connect, and then use 
> select
> or some other means to wait till the socket is done with the connect, and
> then put the socket again in blocking mode.
try this :

   copy the ssockets.pp from <fpc sources>\packages\fcl-net\src dir to 
your project dir and add the following line

SetIOTimeout(FIOTimeout);

to Procedure TInetSocket.Connect; like this

Procedure TInetSocket.Connect;

Var
   A : THostAddr;
   addr: TInetSockAddr;
   Res : Integer;

begin
   A := StrToHostAddr(FHost);
   if A.s_bytes[1] = 0 then
     With THostResolver.Create(Nil) do
       try
         If Not NameLookup(FHost) then
           raise ESocketError.Create(seHostNotFound, [FHost]);
         A:=HostAddress;
       finally
         free;
       end;
   addr.sin_family := AF_INET;
   addr.sin_port := ShortHostToNet(FPort);
   addr.sin_addr.s_addr := HostToNet(a.s_addr);
   SetIOTimeout(FIOTimeout);
   {$ifdef unix}
Res:=ESysEINTR;
     While (Res=ESysEINTR) do
   {$endif}
Res:=fpConnect(Handle, @addr, sizeof(addr));
   If Not (Res<0) then
     if not FHandler.Connect then
       begin
Res:=-1;
       CloseSocket(Handle);
       end;
   If (Res<0) then
     Raise ESocketError.Create(seConnectFailed, [Format('%s:%d',[FHost, 
FPort])]);
end;

It works for me ....

regards,

-- 
Dimitrios Chr. Ioannidis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20180223/69ba86e9/attachment.html>


More information about the fpc-pascal mailing list