ICS153
Sample Server Program
/* ===================================================================
* Server.c : ICS 153 Server Program
* Author : Chris Davison
* =================================================================== */
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/signal.h>
#include <assert.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <math.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
typedef struct sockaddr *SAP ; /* Socket Address Pointer */
#define SERVICE_PORT 1153
#define BUFSIZE 1024 /* static constant */
int main(int argc, char *argv[]) {
char buffer[BUFSIZE] ; /* temporary buffer */
int serv_sockd ; /* server socket descriptor */
int retval ; /* temporary return value */
int on = 1 ; /* Value to on in setsockopt */
struct sockaddr_in serv_addr ; /* server address */
FILE *fp ; /* Output file pointer */
int numrcvd ; /* Number of bytes rcvd on a socket */
/* ------------------------------------------------------
* Creat a socket descriptor
* ------------------------------------------------------ */
serv_sockd = socket(PF_INET, SOCK_DGRAM, 0) ;
if ( serv_sockd < 0 ) {
perror("SOCKET") ;
exit(1) ;
}
/* ------------------------------------------------------
* Set up socket to reuse address
* ------------------------------------------------------ */
retval = setsockopt(serv_sockd,SOL_SOCKET,SO_REUSEADDR,(char*)&on,sizeof(on));
if ( retval < 0 ) {
perror("SETSOCKOPT") ;
exit(1) ;
}
/* --------------------------------------------------------
* setup the local server address that I want to list to
* ------------------------------------------------------ */
memset( (char *)&serv_addr, 0, sizeof(serv_addr) ) ;
serv_addr.sin_family = AF_INET ;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY) ;
serv_addr.sin_port = htons((u_short)SERVICE_PORT) ;
/* ------------------------------------------------------
* Bind to the socket on the local host
* ------------------------------------------------------ */
retval = bind(serv_sockd,(SAP) &serv_addr, sizeof(serv_addr)) ;
if ( retval < 0 ) {
perror("BIND") ;
exit(1) ;
}
/* ------------------------------------------------------
* << Run the server in a while loop. >>
* ------------------------------------------------------ */
while (retval == 0)
{
/* Receive some data */
numrcvd= recv(serv_sockd,buffer,BUFSIZE,0) ;
/* Display the data to the screen */
printf("\nGot %s", buffer) ;
printf("\n");
/* Open the homework file and write the data */
fp = fopen("ics153SP99", "a") ;
retval = fprintf(fp, buffer) ;
if (retval < 0)
break ;
retval = fprintf(fp, "\n") ;
retval = fclose(fp) ;
}
printf("Bad retval in while \n");
printf("This crashed me: %s", buffer);
exit(0) ;
}