[fpc-pascal] Thoughts on Shell Approach to TCP Sockets
Mark Morgan Lloyd
markMLl.fpc-pascal at telemetry.co.uk
Thu Mar 19 10:25:00 CET 2015
Coyo Stormcaller wrote:
> On 03/19/2015 02:27 AM, Michael Van Canneyt wrote:
>> If I may suggest, if you simply want to invoke a program with a socket
>> as standard input,
>> you can just use (x)inetd, it comes by default on all unix
>> installations, and does just that: it is started by init, manages
>> TCP/IP connections and spawns off a program to handle the connection
>> with the socket handle as standard input/output.
>>
>> Why reinvent the wheel ?
>
> Synapse sounds interesting. an entire TCP/IP stack written in Object
> Pascal. It sounds like fun to play with, and I've actually been looking
> around for a userspace TCP/IP stack for a VPN project of mine.
I wonder if I could comment on a couple of misapprehensions. The first
one is that the bulk of the TCP/IP stack is in the operating system,
Synapse (or equivalent) isn't simply talking to a naked Ethernet device,
instead it's using a group of system calls broadly referred to as
"Berkeley Sockets".
While it is possible to write a complete stack from scratch in any
reasonably-complete programming language, and while this has been done
for e.g. embedded systems (or by idiots such as myself for
demonstration/testing purposes :-), in practice it's avoided on account
of (a) the amount of well-tested code that it would attempt to supplant
and (b) consideration of the difficulty of implementing all required
services in a single program.
Second, Pascal, in common with most modern languages, doesn't have
primitives or constructs dedicated to things like sockets. Its
primitives are generally restricted to features which are fairly
general-purpose, with everything else being added as
procedures/functions or (in modern implementations) classes... in either
case loaded from libraries decoupled from the language itself.
It's interesting to compare this with some of the original ALGOL
implementations or even with the original Turbo Pascal, which had a
large number of keywords (e.g. to control file-open modes) which were
defined as part of the language itself. Modern practice would be to make
these into enumerations, which would be passed to a function as a parameter.
--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk
[Opinions above are the author's, not those of his employers or colleagues]
More information about the fpc-pascal
mailing list