Serve - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


Sockets

  

Serve

  

establish a Maple server

 

Calling Sequence

Parameters

Description

Examples

Calling Sequence

Serve(port, server)

Parameters

port

-

positive integer; port number on which the service is to be made available

server

-

Maple procedure (or other expression); use to service a single request

Description

• 

To establish your own Maple services, you can use the Serve command which runs a server on a specified port. It requires two arguments: a port number port on which to listen for requests, and a Maple procedure server which handles a single incoming request. The call Serve( port, server ) establishes a service on the specified port (assuming that you have permissions to do so), and listens for requests on that port. When a request arrives, the callback server is called with the socket ID of the incoming request as its only argument. The server procedure should service the request and return without error.

• 

Any exception raised in the server callback causes the service to be interrupted and the exception propagates to the Maple process that invoked the Serve call.

  

Note: Due to licensing considerations, Serve does not establish a true server; you must manually put the Maple server process into the background, and only one incoming request at a time is handled. No new threads or processes are created to service individual requests, even on the UNIX platform.

• 

The procedure Serve is called for effect, and never returns.

• 

The procedures Sockets[GetPeerHost] and Sockets[GetPeerPort] may be useful in authenticating incoming client requests.

• 

If you use a system tool such as ``netstat'' to examine the sockets that are open, you may notice connections allocated in a ``TIME_WAIT'' state after the server has finished servicing a request. This is a normal effect of the TCP protocol, which keeps sockets allocated in a TIME_WAIT state for some period of time (twice the ``maximum segment lifetime'', or four minutes, by default) after the connection is closed. When a socket is in the TIME_WAIT state, the operating system is ensuring that any network packets that arrive with the allocated socket's address are bound to it and not to a new connection that might otherwise be bound to the same address as the old connection. For further details, see RFC 761 (``Transmission Control Protocol'') Most modern TCP implementations use the so-called ``SYN->RCVD'' transition that allows the operating system to open a new connection directly from the TIME_WAIT state providing that certain conditions are met. See RFC 1122 (``Requirements for Internet Hosts -- Communication Layers''), Section 4.2.2.13 for details.

Examples

This example illustrates a simple greeting server.

server := proc( sid )
    use Sockets in
        Write( sid, sprintf( "Hello %s on port %d, from %s\r\n",
            GetPeerHost( sid ), GetPeerPort( sid ), GetHostName() ) )
    end use
end proc:

The following call causes the Maple session in which it is invoked to start servicing requests. The call never returns.

Sockets:-Serve2525,server

See Also

socket definition

Sockets

Sockets[GetPeerHost]

Sockets[GetPeerPort]

Sockets[Read]

Sockets[references]

Sockets[Write]