[fpc-pascal] socket timeout

Xiangrong Fang xrfang at gmail.com
Wed Apr 17 09:17:09 CEST 2013


Will this be a CPU hog:

t := Now;
while fprecv(s, @buf, buf_len, MSG_DONTWAIT) < 0 do begin
  if Now - t > 0.00001 * timeout then Break;   // approx. <timeout> seconds
end;

Thanks



2013/4/16 Luca Olivetti <luca at ventoso.org>

> Al 16/04/13 12:20, En/na Michael Schnell ha escrit:
> > On 04/16/2013 11:26 AM, Xiangrong Fang wrote:
> >> How can I set the connection and read/write timeout when using socket
> >> in free pascal?
> > I seem to remember that synapse can do this.
>
> Only in svn and it does it this way
>
> if FConnectionTimeout > 0 then
> begin
>   // connect in non-blocking mode
>   b := NonBlockMode;
>   NonBlockMode := true;
>   SockCheck(synsock.Connect(FSocket, Sin));
>   if (FLastError = WSAEINPROGRESS) OR (FLastError = WSAEWOULDBLOCK) then
>     if not CanWrite(FConnectionTimeout) then
>       FLastError := WSAETIMEDOUT;
>   NonBlockMode := b;
> end
> else
>   SockCheck(synsock.Connect(FSocket, Sin));
>
>
> NonBlockMode in turn uses fpIoCtl with the FIONBIO parameter,
> WSAEINPROGRESS=EsysEINPROGRESS, WSAEWOULDBLOCK=EsysEWOULDBLOCK and
> CanWrite  does an fpSelect
>
> Bye
> --
> Luca
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130417/2411e790/attachment.html>


More information about the fpc-pascal mailing list