serverswitch - part of Server to define a Port and a
Protocol and receive requests
A ServerSwitch object receives requests from Clients who
wants to connect to the Server. If a Server defines several
Ports (maybe providing different protocols or functionality)
then there will several objects of class ServerSwitch.
See the users manual in simioprocess.ps
Boris Magnusson, Lund Institute of Technology.
SocketBasics class ServerSwitch(ServerAddress);
ref(InterNetAddress) ServerAddress; !- Defines port and
There is usually only one object of this class in a Server
where it defines a Port with a Protocol. External requests
to connect are handled by the operation NextRequest. It
initializes an object of class ServerSocket to be used to
service the connection.
The functionality provided by the library SimIOProcess can
be used to avoid calling NextRequest until a request is
actually present (and thus avoiding the possible hang). See
this library for details.
Class used by a server to define a Server-Port. Receives
requests from Clients (see class ClientConnection) who
whants to talk to us. Our result of the request is another
channel which is then used for the actual talking (see
Kind: Concrete. ;
Init: the parameter must be a valid, unique, Port number. ;
Sequencing: (IsOpen/Open (GetChannelNo/<IO-ops>)* Close)*;
boolean procedure Open(Qlength);
integer Qlength; ! Maximum number of unanswered Clients
Open the socket-port for incomming requests. Qlength is the
maximum number of unanswered Clients we allow. If more
Clients have called tried to contact us (ClientSocket.Open)
but are not yet answered we are considered overrun and
further calls are refused.
ref(ServerSocket) procedure NextRequest(ReceiverSocket);
ref(ServerSocket) ReceiverSocket; ! Will be connected to
Wait until there is a Client trying to contact us (calling
ClientSocket.Open). Then return with ReceiverSocket
initiated to use the channel to the Client. ReceiverSocket
also carries the InternetNumber of the contacting Client.
When this rendezvous has taken place, both Server and Client
continue their execution. Returns None if the there was some
error situation detected.