[gambit-list] Gamsock darcs repo available

Jeff Read bitwize at gmail.com
Wed Sep 20 13:43:11 EDT 2006


Hi all,

In the spirit of "release early, release often" I have elected to make
a Darcs repository available which will allow you to track the
progress of Gamsock. You can access it by doing:

  darcs get http://ii-0-ii.com/parodycheck/repos/gamsock

Notes:

* Documentation is nonexistent but you are welcome to peruse and bang
on the code.

* Actual socket calls (socket, bind, connect, send, recv, etc.) tend
to bear their POSIX names. (Change this?)

* Sockets and sockaddrs are opaque types. Sockaddrs have constructors
for each of the different address families, which convert the
parameters into the appropriate sockaddr data; and accessors to
convert the other way. (Should I give people access to the raw
sockaddr bits, as sb-bsd-sockets for SBCL does?)

* Calls which on the C side take enums can take either numeric values
or symbol constants on the Scheme side. E.g., you can do (socket
PF_INET SOCK_STREAM 0) or (socket 'inet 'stream 0). (Should I favor
one over the other?)

* Likewise, calls which on the C side take the bitwise inclusive OR of
a set of flags, can take a list of symbols instead on the Scheme side.

* Currently there are no protocol names specified. For an inet socket
you may specify 0 as the protocol, in which case the protocol will be
selected by the socket type (SOCK_STREAM, SOCK_DGRAM, etc.)

* Unix-domain and IPv4 sockets (TCP and UDP) should be supported. Only
TCP IPv4 sockets have been thoroughly tested. One can initiate and
accept connections, send, and receive.

* IP addresses (for make-inet-sockaddr) take the form of a
four-element u8vector. You may also pass in a string (e.g.,
"127.0.0.1"). This latter option is kind of arbitrary and may
disappear, or be moved to a facility to do DNS lookups when it becomes
available. Port numbers are fixnums.

* You can only send u8vectors of data at this time. You also get a
u8vector back when you do recv.

* There will be a facility (not yet implemented) that will let you
wrap stream sockets at least with Gambit ports, mimicking the facility
of tcp-sockets already in place in Gambit.

* This has been tested on 4.0b17. YMMV on any other version (including
yesterday's release).

* If there is an error, an os-exception will be raised with the error
code of the exception set to errno. (Change this? Make the errors
meaningful, platform-agnostic?)

* For the time being, Gamsock works on Linux only. Currently on BSD,
Gamsock compiles but when you try to bind a socket to an address, it
raises an os-exception with code EINVAL. I think it has to do with the
fact that OpenBSD sockaddrs have an additional sa_len element that
Linux sockaddrs lack. More testing is necessary.

I hope this is interesting or useful to some of you out there. Please
share with me your thoughts and suggestions.

--Jeff



More information about the Gambit-list mailing list