[fpc-pascal] Network Library

Ian Macintosh ian.macintosh at igmac.co.uk
Fri Mar 23 16:37:14 CET 2012

Hi everyone.

I've not posted here before so let me introduce myself.  My name is Ian
Macintosh and I've been programming in Pascal on and off for some 25 odd
years on various applications, mostly business and mostly SQL based.  I
have only recently tried FPC, specifically via Lazarus and it's rather nice

The reason for writing the list is that I need a game network library for
my personal use.  Having browsed over the various available libraries I
don't find anything that quite fits the bill.  Some are just plain too
much, some are non free, many seem to have fallen into various states of
disrepair, etc.  The one that seems to almost fit the bill is ENet (

I am not averse to writing it myself, and having searched quite thoroughly
now, see that it is the most likely outcome.  With that in mind, I've
written up a requirements spec as a broad swipe at the problem.  I am
hoping that in reading the requirements, the list members may be able to
possibly suggest an existing suitable library, or suggest additions,
deletions or corrections to the requirements spec, or even display an
interest in participating in the library.  Any participation, even limited
to purely constructive critisism would be appreciated.

Herewith the document itself which will obviously loose some formatting in
the process.  If you are not averse to seeing it in it's Google Docs form,
the direct link to the source document is

Please feel free to mail me directly with your comments, flames or
critique, or to the list if you feel that the subject material suits the
lists purpose.




Game Network Library

   - Low level library

Allows other more complex functions to be built on top.  Also allows others
to choose to use only this part of the library if the higher functions are
not suitable for their application.

   - Low latency

   - LGPL - Free Open Source Software without limitations.  In particular,
   the ability to link it into any program, even a commercial one.

   - Session based

Support session validation via callback and receive/transmit login or
authentication details.  Allocate a session ID to established connections,
but allocate decreasingly minimal resources to unauthenticated new

   - Inquiry (without a session)

Support non-session data enquiry such as for example querying for a list of
servers from a master list server.

   - Unreliable data transfer

Not all data requires reliable transfer.  For example voice data, if it
arrives out of sequence or late or never, makes no difference.

   - Reliable data transfer

Some data must be delivered.  Support both reliable sequenced and
unsequenced data packets.

   - Bandwidth limiting per interface

To maintain low latency for all connections, do not exceed the interface
bandwidth capabilities.  Queueing is the enemy of low latency.

   - Bandwidth limiting per session

A major factor in multi-user environments is bandwidth costs.  In addition,
individual bandwidth limits ensure that single sessions do not impact the
experience of other connections.

   - Single Port UDP only

Multiple ports are unnecessary.  An extremely trivial overhead of a single
byte will allow as many concurrent streams of data as are necessary.

   - Non blocking when within bandwidth and queue limits.  If bandwidth
   limits are exceeded, make the caller(s) queue, not the traffic.  Not a
   major issue if the caller is multi-threaded.  However when used correctly
   (ie, enquire remaining bandwidth details before creating additional
   packets) will not block.  However, if used incorrectly the library will
   block the caller.

   - Apply QOS to all data-grams - default time-critical but allow
libraryuser to set another default if required.


   - Payload encryption

Provide some protection against simple man-in-the-middle traffic
Per session details Bandwidth

   - Optional limits
   - Statistics
      - Total bandwidth
      - Current moving average
   - Query available bandwidth

Round-trip time

   - Cumulative average
   - Current moving average

Packet loss

   - Cumulative total
   - Current moving average


   - Standard unreliable data-grams (i.e. - UDP default)
   - Reliable unsequenced data-grams
   - Reliable sequence data-grams


   - Multiple streams
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20120323/193c1241/attachment.html>

More information about the fpc-pascal mailing list