Giter Club home page Giter Club logo

marignotti's Introduction

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:

  1. copy the marignotti, ftp, sic, and whois 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
    
  1. copy the etc/services file to /etc/services (if it does not exist).

  2. 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.

  3. If you do not have a DNS server, edit /etc/hosts to 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

marignotti's People

Contributors

ksherlock avatar sheumann avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

sheumann

marignotti's Issues

example "resolve.conf" file should be renamed to "resolv.conf"

I couldn't figure out why DNS was working perfectly for GS/OS GUI apps but not for GNO shell apps. After much headdesk-ing, I finally realized that Marignotti ships with an example "resolve.conf" file, and the instructions suggest moving and editing that same file. But that file should be named "resolv.conf" (note: no "e"). By copying and editing the file that came with the distro, I unwittingly ended up with a file that GNO wasn't even looking for. It might be good to rename this file so that others don't run into the same problem. :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.