On Sun, 26 Jul 2015 15:47:52 +0000 Mark Morgan Lloyd <markmll.fpc-pas...@telemetry.co.uk> wrote:
> Michael Van Canneyt wrote: > > On Sun, 26 Jul 2015, Coyo wrote: > > > >> I have read on the wiki and documentation that FreePascal does not > >> have any native support for socket handling, and that you need an > >> external third party library to have any support for it. > > > > This is not correct. Of course Free Pascal has native support for socket > > handling ? I will link the wiki articles later to demonstrate the difficulty of using sockets in FPC. However, I do appreciate the advice. How do you import a unit/library in FPC? Is there a .deb package or something that I install? When compiling or distributing compiled FPC codebases that use external units or libraries in FPC, how do you go about doing that? I failed to find documentation illuminating how one goes about doing this. Any enlightenment would be greatly appreciated. > Knowing the URL of that wiki page would be useful, so that we can fix it > if it really is broken. What version of FPC is the documentation for? > > >> I want to write an IRC bot in FreePascal, but I need the ability to > >> both make outgoing connections to IRC servers or other bots of the > >> same kind, as well as accept incoming connections from other bots. > >> > >> I'd prefer as straightforward TCP sockets support as I can get. Any > >> advice would be greatly appreciated. Thank you in advance for your > >> time and patience. > > > > Just use the sockets or ssockets units. The first is plain pascal and a > > straightforward interface as you encounter it in any C implementation, > > the second is using classes. I dislike object oriented programming, it makes something that should be very simple, compact and portable to something more complex than it really has to be. But that's just a personal preference. Thankfully, FPC lets me use purely functional programming if I prefer to do so. Java and new Perl force object oriented programming down my throat, and is part of the reason I have a deep interest in FPC. I want to keep it stupid simple. I prefer, when possible, to avoid using external dependencies, and to keep all code in a single file. While I am not a supergenius coder or anything, I CAN appreciate elegantly-written code. Compact source code and compact binaries are something I can appreciate. Overuse or gratuitous use of external libraries and dependencies disturbs me. I do not know how to use external libraries in C, as it seems more complex than it's really worth. All functions I ever use are in a single C file. Reinventing the wheel? I don't want to seem ungrateful, and my mother taught me that if you can't say something nice, don't say anything at all. Well, that's something a mother would say if I actually had one. I think. Anyway, I will not remark on what I think of this aversion to multiple implementations of things others have written questionably usable code to do. I don't want to be mean about this, after all, any advice you give here is free. Don't look a gift horse in the mouth, right? I don't mean to be irritable, but I've heard "don't reinvent the wheel" far too many times, especially when defending centralized or dangerously homogenous networks and systems, rather than multiple implementations and diversity in network components and systems. One can argue over-reliance on a single implementation of a cryptographic library, namely OpenSSL, is actually a security RISK rather than a benefit. See: Heartbleed. ONLY OpenSSL-dependent applications, systems, and services were affected by that programming failure. Anyway, that's another topic entirely, and not something I want to get into on this list, as it is off-topic, and I want definitive answers on how to do sockets in pure FPC, rather than using netcat or some external program via shell scripting. The IRC bot I have now uses a shell script to invoke it, and establishes the connection using netcat and standard input/output. I want to eliminate netcat from being a dependency. I can worry about TLS and whatnot later. > Seconded, it's something I do on a regular basis when I have to do > something with a non-standard protocol. However I think there's a couple > of points worth considering. > > The first is that the Pascal /language/ doesn't have implicit support > for sockets, you need to import an appropriate unit/library. That's > going to be the case for almost all general-purpose languages, with the > exception of things like Perl and Python which try to build in > everything a programmer might need including the kitchen sink. I'm used to Perl, Python and Ruby, which all have systems of making using standard libraries trivial. C doesn't really have anything like that. > The second is that for standard protocols like FTP and HTTP it might be > better to use a third-party library to avoid reinventing the wheel when > it comes to security etc., some of these- for example Synapse- are > routinely used by almost everybody but aren't packaged with FPC because > their developers prefer to stay independent. I would greatly appreciate a definitive answer on how to go about using Synapse for things, since the wiki and docs I have found are either ancient, inconsistent, unclear, or incomplete. I would be happy to update the wiki, if you want me to. The reason I want to have sockets internal to FPC instead of using an external tool such as netcat is because I want to use one of the core features of FPC, namely portability of code. FPC has incredible code portability. It is trivial to compile code for a huge selection of target platforms, and I would prefer my code to be as portable as possible, and rely on as few dependencies as possible. However, implementing an entire userspace TCP/IP protocol stack in FPC is something I am NOT ready to do at this time, especially for a simple IRC automaton. Maybe later... > -- > Mark Morgan Lloyd > markMLl .AT. telemetry.co .DOT. uk > > [Opinions above are the author's, not those of his employers or colleagues] > _______________________________________________ > fpc-pascal maillist - fpc-pascal@lists.freepascal.org > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal -- Coyo <c...@darkdna.net> _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal