IPX/SPX Programming Manual
Sample Programs
HP NonStop IPX/SPX Programming Manual—528022-001
6-7
Sample SAP Programs
#include <nv.h>
#include <netdb.h>
#include <zspi.c>
#include <zipx.c>
#include <sapapi.h>
#include <cextdecs (FILE_CLOSE_)>
#define DATA_BUF_SIZE 512
#define SERVER_TYPE 42
#define SERVER_NAME "TANDEM_EXAMPLE_SERVER"
#define PROCESS_NAME "$NV2A"
main(int argc, char *argv[])
{
struct sockaddr_nv snv, from;
int sock, newsock;
int bytesReceived;
int fromlen;
short sapfnum;
char recvbuf[DATA_BUF_SIZE];
short start_advertising(short sock, char f*pServer,short type);
void stop_advertising(short fnum, char *pServer, short type);
/*
* Specify the name of the NonStop IPX/SPX
* Protocol Process if required.
*/
socket_set_nv_name(PROCESS_NAME);
/*
* Open a socket.
*/
if ((sock = socket(AF_NV, SOCK_STREAM, 0)) < 0) {
perror("SPX Server: socket failure");
exit(1);
}
snv.snv_family = AF_NV;
/*
* Bind to a socket that we intend to listen on.
* We specify an address length of zero, which
* means that SPX will choose a socket number.
*/
if (bind(sock, (struct sockaddr *)&snv, 0) < 0) {
perror("SPX Server: bind failure");
exit(1);
}
/*
* Set up socket for incoming connection requests.
*/
if (listen(sock, 5) < 0) {
perror("SPX Server: listen failure");
exit(1);
}
/*
* Advertise this service.
*/
sapfnum = start_advertising((short)sock, SERVER_NAME, SERVER_TYPE);
if (sapfnum < 0) {
fprintf(stderr, "SPX Server: SAP advertising failure\n");
exit(1);
}
for(;;) {