<div dir="ltr"><div><div>Will this be a CPU hog:<br><br></div><div><span style="font-family:courier new,monospace">t := Now;<br></span></div><span style="font-family:courier new,monospace">while fprecv(s, @buf, buf_len, MSG_DONTWAIT) < 0 do begin<br>

</span></div><div><span style="font-family:courier new,monospace">  if Now - t > 0.00001 * timeout then Break;   // approx. <timeout> seconds<br></span></div><span style="font-family:courier new,monospace">end;</span><br>

<br>Thanks<br><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/16 Luca Olivetti <span dir="ltr"><<a href="mailto:luca@ventoso.org" target="_blank">luca@ventoso.org</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Al 16/04/13 12:20, En/na Michael Schnell ha escrit:<br>
<div class="im">> 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>
> I seem to remember that synapse can do this.<br>
<br>
</div>Only in svn and it does it this way<br>
<br>
if FConnectionTimeout > 0 then<br>
begin<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>
    if not CanWrite(FConnectionTimeout) then<br>
      FLastError := WSAETIMEDOUT;<br>
  NonBlockMode := b;<br>
end<br>
else<br>
  SockCheck(synsock.Connect(FSocket, Sin));<br>
<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>
<span class="HOEnZb"><font color="#888888">--<br>
Luca<br>
</font></span><div class="HOEnZb"><div class="h5"><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>