GNU Serveez

Serveez is a server framework. It provides routines and help for implementing IP based servers (currently TCP, UDP and ICMP). It is also possible to use named pipes for all connection oriented protocols.

We think it is worth the effort because many people need server functionality within their applications. However, many people experience problems with select()- or poll()-loops, and with non-blocking operations.

This application demonstrates various aspects of advanced network programming in a portable manner. It is known to compile and run on GNU/Linux systems, as well as on other 32-bit and 64-bit flavours of Unix and on Microsoft Windows (9x/ME/NT/2000/XP).

You can use it for implementing your own servers or for understanding how certain network services and operations work.

The package includes a number of servers that work already: an HTTP server, an IRC server, a Gnutella spider and some others. One of the highlights is that you can run all protocols on the same port. The application itself is single threaded but it uses helper processes for concurrent name resolution and ident lookups.

Requirements

Serveez needs the GNU Guile (Ubiquitous Intelligent Language for Extensions) language core library for configuring purposes. Currently Serveez is known to work with Guile 1.4 and later. You can download this package from ftp.gnu.org. (A very old MinGW32 port is available at SourceForge.)

Download / News

(HTTPSHTTPFTPmirrors)

Latest release: 0.2.2 (2013-12-02)

  • bugfixes
    • make SMOB/C-object correspondance precise

      Previously, the "socket", "server" and "servertype" SMOBs were consed on-demand, that is, on every callback invocation, thus defeating Scheme functionality requiring stable object identity (notably, object properties).

      Now, Scheme objects persist "normally" and the correspondance between Scheme and the underlying C object is precise; when the C object undergoes "finalization", the Scheme object likewise undergoes "invalidation" -- breaking the correspondance -- but otherwise leaving the identity intact. The upshot is that object properties will still work, although passing the Scheme object to procs that expect to access the underlying C object will have undefined (crash or demons-from-nose or ...) behavior.

    • libserveez/coservers don't touch ‘svz_socket_t.data

      The ‘data’ member of ‘svz_socket_t’ is for exclusive use by the servers (clients of libserveez). Regardless, if you wish to run multiple servers bound to one port, those still need to find a way to share (i.e., not clobber each other's) ‘sock->data’. The Guile server explicitly avoids ‘sock->data’ as well, so the only thing you need to worry about is builtin servers written in C.

  • removed
    • Scheme user-data procs

      These procs are no longer provided:

       svz:sock:data
       svz:server:state-ref
       svz:server:state-set!
       svz:server:state->hash

      The Scheme way is to use object properties. For example, the src/guile-server/{mandel,icecast}-* code now does just that.

    • Guile 1.3.4 support

      This was announced in Serveez 0.2.1 (2013-03-24) NEWS.

  • changes to libserveez
    • new API element: ‘svz_sock_prefree

      This function can be used to register/unregister a function to be called by the libserveez core immediately prior to freeing a ‘svz_socket_t’ object.

      Clients that "wrap"svz_socket_t’ can use it to update the validity of the C object wrt the outer object. (This is what the Guile server does, in fact – see src/guile-server.c.)

    • version spec bump: ‘2:0:1

      As a consequence of the new API element, the libserveez version spec is now ‘2:0:1’.

       (info "(libtool) Updating version info")

      Briefly, this means that this libserveez is backward-compatible w/ that of GNU Serveez 0.2.1.

  • new option: ‘serveez --list-servers

    (Short form: ‘-L’.) This displays prefix and description for each builtin server, with a special case for the Guile server.

  • serveez --help’ shows home page / "gethelp" info
  • serveez --version’ shows copyright / license

    This is for compliance w/ the GNU coding standards.

     (info "(standards) --version")
     (info "(standards) --help")
  • documentation more spacious

    There are now blank lines between ‘@item’s and before ‘@example’, ‘@table’ and ‘@multitable’ blocks. Texinfo 4.13 used to add them automagically, but 5.x is not so generous.

  • maintainer tools upgraded
    • GNU Automake 1.14
    • GNU Texinfo 5.2
    • Guile-BAUX 20130913.1631.fcfbe70

(unadorned)

Documentation

Documentation for Serveez is available online, as is documentation for most GNU software. You may also find information about Serveez by running info serveez or by looking at /usr/share/doc/serveez/, /usr/local/share/doc/serveez/, or similar directories on your system.

Mailing Lists

Serveez has the following mailing lists:

Announcements about Serveez and most other GNU software are made on the info-gnu mailing list (archive).

Security reports that should not be made immediately public can be sent directly to the maintainer. If there is no response to an urgent issue, you can escalate to the general security mailing list for advice.

Getting involved

Development of Serveez, and GNU in general, is a volunteer effort, and you can contribute. For information, please read How to help GNU. If you'd like to get involved, it's a good idea to join the discussion mailing list (see above).

For development sources, issue trackers, and other information, please see the Serveez project page at savannah.gnu.org.

Serveez is currently maintained by Thien-Thi Nguyen. Past maintainers are: Stefan Jahn, Raimund Jacob, Martin Grabmüller. Please use the mailing lists for contact.

Licensing

Serveez is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.