MariGNOtti
MariGNOtti is a network driver for GNO/ME 2.0.6. It provides a translation layer between BSD sockets and Marinetti. Think of it as a replacement for GSTCP.
Installation:
- copy the
marignotti,ftp,sic, andwhoisexecutables to your/usr/local/bindirectory.
-
ftpis an update of the gno 2.0.6 ftp (it adds passive ftp support). -
whoisis an updated version (from FreeBSD 9.0). The gno 2.0.6 version is from FreeBSD 2.1. -
sicis a very simple irc client.Example:
sic -h irc.a2central.com -p 6667 -n myname (a bunch of messages) :j #a2c.chat << join a room
-
copy the
etc/servicesfile to/etc/services(if it does not exist). -
edit and copy the
etc/resolv.conffile to/etc/resolv.conf(if it does not exist). This file points to your DNS server; update it as needed. -
If you do not have a DNS server, edit
/etc/hoststo include your favorite sites.
Usage:
Run marignotti in the background (marignotti &). To quit, bring it to the
foreground (fg) and hit control-C.
If you are using the Sweet-16 emulator version 3.0, marignotti -d will print
some debugging information to the debugger console. marignotti -dd will
enable extra debugging information (including the contents of reads and
writes).
What it does:
While marignotti is running in the background, it translates BSD socket calls into Marinetti tool calls. It also handles blocking IO, socket options, select, etc.
Architecture:
BSD sockets are, by default, blocking whereas everything Marinetti does (other than the inital network connection) is non-blocking. To handle blocking behavior, each socket has a semaphore. The main thread performs all the polling and uses the semaphore to signal the other threads when they can proceed.
Supported:
socket -- only support for PF_UNIX, SOCK_STREAM, and SOCK_DGRAM.
connect -- but non-blocking connects are not yet supported.
bind -- currently a no-op since the old whois used it.
read/recv/recvfrom -- supports blocking, non-blocking, timeouts, and RCVLOWAT.
The address parameter of recvfrom is not supported. OOB is not supported.
write/send/sendto -- does not support SNDLOWAT, OOB, or the address parameter
of sendto.
close -- does not support SOLINGER type functionality.
shutdown -- sets flags but the flags are not completely implemented.
ioctl -- support for FIONREAD (bytes available to read) and FIONBIO
(set/clear non-blocking).
setsockopt -- SO_SNDLOWAT, SO_RCVLOWAT, SO_SNDTIMEO, and SO_RCVTIMEO are supported.
SO_OOBINLINE errors unless it's true.
SO_DEBUG, SO_REUSEADDR, SO_REUSEPORT, SO_KEEPALIVE set a flag but have no other effect.
getsockopt -- support for SO_TYPE, SO_DEBUG, SO_REUSEADDR, SO_REUSEPORT, SO_KEEPALIVE,
SO_OOBINLINE, SO_SNDLOWAT, SO_RCVLOWAT, SO_SNDTIMEO, SO_RCVTIMEO, SO_NREAD, SO_NWRITE
getsockopt -- support for SO_OOBINLINE, SO_SNDLOWAT, SO_RCVLOWAT,
SO_SNDTIMEO, SO_RCVTIMEO, SNDLOWAT and SNDTIMEO set flags but don not have any
other effect. OOBINLINE is only be supported when true.
Not (yet) supported:
- OOB (out of band) data (and will never be supported).
- raw sockets (
SOCK_RAW) - TCP servers (
listen/accept). Should be simple, though. - UDP servers