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.
- copy the
marignotti
,ftp
,sic
, andwhois
executables to your/usr/local/bin
directory.
-
ftp
is an update of the gno 2.0.6 ftp (it adds passive ftp support). -
whois
is an updated version (from FreeBSD 9.0). The gno 2.0.6 version is from FreeBSD 2.1. -
sic
is 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/services
file to/etc/services
(if it does not exist). -
edit and copy the
etc/resolv.conf
file 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/hosts
to include your favorite sites.
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).
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.
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.
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.
- OOB (out of band) data (and will never be supported).
- raw sockets (
SOCK_RAW
) - TCP servers (
listen
/accept
). Should be simple, though. - UDP servers