/* 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);
}
}
©1998 MRC