Writing a Server Program

This page explains how to write a server program that uses SHRIMP RPC.

First, create an interface definition file, written in SIDL, and run the stub-generator on it to produce an include-file, a client C file, and a server C file.

Suppose you're implementing the foo service. After running foo.x through the stub generator, you'll have three files, foo_rpc.h, foo_clnt.c, and foo_serv.c.

Your server program should #include foo_rpc.h. You should compile foo_serv.c into foo_serv.o, and link foo_serv.o with your server program and with the SRPC library, /u/shrimp/lib/libsrpc.a. (When compiling, use the -I/u/shrimp/include switch so the compiler can find the SRPC include files.)

Servicing Remote Calls

Before a server program can accept calls from a remote client, it must first create a SrpcSrvBinding to represent the connection to that client. A separate SrpcServBinding is needed for each client that the server program will serve.

The SRPC library automatically maintains a list of all existing SrpcServBindings. When you call

int srpcServerPoll(void); the library will check each binding. For each binding, if the client is attempting an RPC, the library will service that RPC. (If the client is not attempting an RPC, the library immediately goes on to the next client.) Once each SrpcServBinding has been checked, srpcServerPoll completes, returning the number of RPCs that were serviced.

Ed Felten