A TCP Server



/* written by Mike Cook, optimized by Mich Cook June 1998*/

#include "inet.h"

void main()
{
	int fd, newfd, clilen, childpid, *addrsize;
	struct sockaddr_in cli_addr, serv_addr;

	if ( (fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)   {
	    perror("server: can't open stream socket");
	    return;
	}
	
	bzero ((char *) &serv_addr, sizeof(serv_addr))	;
	serv_addr.sin_family = AF_INET;
	serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
	serv_addr.sin_port = htons(INADDR_ANY);
	
	if (bind(fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)   {
	    perror("server: can't bind local address");
	    return;
	}

	*addrsize = sizeof(serv_addr);
	getsockname(fd, (struct sockaddr *) &serv_addr, addrsize);
	printf("We're in the port #%d.\n",ntohs(serv_addr.sin_port));
	
	listen(fd, 5);
	for ( ; ; )
	{		
	    clilen = sizeof(cli_addr);
	    newfd = accept(fd, (struct sockaddr *) &cli_addr, &clilen);
	    if (newfd < 0)   {
		perror("server: accept error");
		return;
	    }		
	    if ( (childpid = fork()) < 0)   {
		perror("server: fork error");
		return;
	    }		
	    else if (childpid == 0)   {
		close(fd);
		add_ints2(newfd);
		return;
	    }
	    close(newfd);
	}
}


[Project Page] [Programs Page] [REU Page] [Scientific Visualization]

©1998 MRC