[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