<div dir="ltr">I thought MSG_DONTWAIT is actually the flag to switch to nonblocking mode, isn't it?  As a matter of fact, the fprecv() above would get a result of -1 and a sockterror of "Try Again", which is exactly the behavior of nonblocking read.<br>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/17 Rainer Stratmann <span dir="ltr"><<a href="mailto:rainerstratmann@t-online.de" target="_blank">rainerstratmann@t-online.de</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im"> On Wednesday 17 April 2013 09:17:09 you wrote:<br>
> Will this be a CPU hog:<br>
><br>
> t := Now;<br>
> while fprecv(s, @buf, buf_len, MSG_DONTWAIT) < 0 do begin<br>
>   if Now - t > 0.00001 * timeout then Break;   // approx. <timeout> seconds<br>
> end;<br>
><br>
> Thanks<br>
<br>
</div>I did not read the whole thread, but that you favorite blocking mode (which I<br>
don't use).<br>
<br>
For MSG_DONTWAIT as far I know you have to change to the nonblocking mode.<br>
<div class="HOEnZb"><div class="h5"><br>
><br>
><br>
> 2013/4/16 Luca Olivetti <<a href="mailto:luca@ventoso.org">luca@ventoso.org</a>><br>
><br>
> > Al 16/04/13 12:20, En/na Michael Schnell ha escrit:<br>
> > > On 04/16/2013 11:26 AM, Xiangrong Fang wrote:<br>
> > >> How can I set the connection and read/write timeout when using socket<br>
> > >> in free pascal?<br>
> > ><br>
> > > I seem to remember that synapse can do this.<br>
> ><br>
> > Only in svn and it does it this way<br>
> ><br>
> > if FConnectionTimeout > 0 then<br>
> > begin<br>
> ><br>
> >   // connect in non-blocking mode<br>
> >   b := NonBlockMode;<br>
> >   NonBlockMode := true;<br>
> >   SockCheck(synsock.Connect(FSocket, Sin));<br>
> >   if (FLastError = WSAEINPROGRESS) OR (FLastError = WSAEWOULDBLOCK) then<br>
> ><br>
> >     if not CanWrite(FConnectionTimeout) then<br>
> ><br>
> >       FLastError := WSAETIMEDOUT;<br>
> ><br>
> >   NonBlockMode := b;<br>
> ><br>
> > end<br>
> > else<br>
> ><br>
> >   SockCheck(synsock.Connect(FSocket, Sin));<br>
> ><br>
> > NonBlockMode in turn uses fpIoCtl with the FIONBIO parameter,<br>
> > WSAEINPROGRESS=EsysEINPROGRESS, WSAEWOULDBLOCK=EsysEWOULDBLOCK and<br>
> > CanWrite  does an fpSelect<br>
> ><br>
> > Bye<br>
> > --<br>
> > Luca<br>
> ><br>
> > _______________________________________________<br>
> > fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a><br>
> > <a href="http://lists.freepascal.org/mailman/listinfo/fpc-pascal" target="_blank">http://lists.freepascal.org/mailman/listinfo/fpc-pascal</a><br>
_______________________________________________<br>
fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a><br>
<a href="http://lists.freepascal.org/mailman/listinfo/fpc-pascal" target="_blank">http://lists.freepascal.org/mailman/listinfo/fpc-pascal</a><br>
</div></div></blockquote></div><br></div>