Ok, here is some of the code. I intended to move onto a more complex project, but this Solaris bus error issues is holding me back.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>
#define MAX_BUF 1024
#define ERR_CHK( A, B ) if( A == -1 ) { \
perror( B ); \
exit(1); }
int fdmax;
int port = 8000;
int max_conn = 5;
/* socket data */
int sin_size;
fd_set master, read_fds;
int server_sock, client_sock;
struct sockaddr_in server_addr;
struct sockaddr_in *client_addr;
void getInputString( char *buf );
int main( int argc, char **argv ) {
if( argc == 1 ) {
// start server with no binding
} else if(argc == 3) {
// start server binded to port with max connections
port = atoi(argv[1]);
max_conn = atoi(argv[2]);
} else {
printf( "Unkown command line arguments\n" );
}
ERR_CHK( (server_sock = socket(AF_INET, SOCK_STREAM, 0)), "socket" );
fprintf( stderr, "server: local socket created...\n" );
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = INADDR_ANY;
memset(server_addr.sin_zero, '\0', sizeof(server_addr.sin_zero) );
ERR_CHK( (bind(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr))),
"bind" );
fprintf( stderr, "server: bound to local socket...\n" );
ERR_CHK( (listen(server_sock, max_conn)), "listen");
fprintf( stderr, "server: listening on port %d...\n", port );
FD_ZERO(&master);
FD_ZERO(&read_fds);
if((client_addr = malloc(sizeof(struct sockaddr_in) * max_conn)) == NULL ) {
perror("malloc");
exit(1);
}
sin_size = sizeof(struct sockaddr_in);
/* main loop */
int numc = 0;
for( ;; ) {
if( (client_sock = accept( server_sock,
(struct sockaddr *)&client_addr[numc],
&sin_size )) == -1 ) {
perror("accept");
continue;
}
printf("server: recieved connection from %s\n",
inet_ntoa(client_addr[numc].sin_addr));
/*
now prepare to fork over work for each connection
*/
} // for
return 0;
}