[Lazarus] lnet component

Antonio Fortuny a.fortuny at sitasoftware.lu
Wed Sep 5 10:01:59 CEST 2012


Hi list.

I'm looking for a solution to the next problem:
I've an application running in both Win32 and WinCE. So far it runs OK 
but I run into trouble when I try to control the TCP/IP traffic between 
the application and a TCP/IP server running into a Windows box (Delphi 
application).

AFAIK the TLTCPComponent (Lazarus lnet package) I use as a TCP client, 
runs asynchronously. But in some places I need to control a timeout and 
do something special when the TCP link fails on either the connection 
phase or the send/receive phase because the internal timeouts are 
definitely too long. I didn't see any place to setup a timeout for the 
TCP component.

For the moment I've built a loop using a Sleep (50 ms on each loop) and 
this is quite boring. I guess than when the main thread enters a Sleep, 
everyting in it falls into the same Sleep, TCP inclusive.

Question: how to suspend the application while waiting for either a 
connection or a response from the server ? In other words, how to run 
lnet in a synchronous way (like Indy does) ?

My own solution tends to use a thread which can run asynchronously and 
process event from the socket as they arrive (onConnect, onReceive). The 
thread can post a global variable when operation is done. The problrm is 
this is a heavy piece of code and tests are not easy. This also means an 
application refactory. Looks like Indy is working actually. 
Unfortunately, although Indy compiles and works with Lazarus Win32, 
Win64 and Linux64, it does not compile for WinCE.

All ideas are welcome.

Antonio.





More information about the Lazarus mailing list