IPX/SPX Programming Manual

Sample Programs
HP NonStop IPX/SPX Programming Manual528022-001
6-8
Sample SAP Programs
/*
* Wait for a connection request.
*/
printf("SPX Server: waiting for connection request\n");
fromlen = sizeof(from);
newsock = accept(sock, (struct sockaddr *)&from, &fromlen);
if (newsock < 0) {
perror("SPX Server: accept failure");
stop_advertising(sapfnum, SERVER_NAME, SERVER_TYPE);
break;
}
printf("SPX Server: connected to port 0x%hx\n",
from.snv_addr.s_port);
for (;;) {
/*
* Receive data until either an EOF or error is received.
*/
if ((bytesReceived = recv(newsock, recvbuf, DATA_BUF_SIZE,
0)) < 0) {
perror("SPX Server: recv failure");
FILE_CLOSE_((short)newsock);
break;
}
if (bytesReceived == 0) {
/* received end of file */
printf("SPX Server: received EOF\n");
FILE_CLOSE_((short)newsock);
break;
}
printf("SPX Server: received %d bytes\n", bytesReceived);
}
}
}
short
start_advertising(short sock, char *pServer, short type)
{
struct sockaddr_nv snv;
unsigned long error;
short fnum;
int len = sizeof(snv);
NETWARE_SET_NAME(PROCESS_NAME);
if ((fnum = SAP_OPEN(&error, 0, 1, 0)) < 0)
return -1;
if (getsockname(sock, (struct sockaddr *)&snv, &len) < 0) {
(void)SAP_CLOSE(fnum, &error);
return -1;
};
if (SAP_START(fnum, &error, pServer, type, snv.snv_addr.s_port) < 0) {
(void)SAP_CLOSE(fnum, &error);
return -1;
}
return fnum;
} /* End of start_advertising() */
void