#include "server.h" int main(int argc, char* argv[]) { /* fd -> file descriptor */ int socket_server_fd = (int)NULL, socket_server_port = (int)NULL, socket_accept_fd = (int)NULL, sockaddr_in_size = sizeof(struct sockaddr_in), err = (int)NULL; /* Internet socket address stuct */ struct sockaddr_in server_addr, accept_addr; struct client * clients = (struct client *) NULL, * atual = (struct client *) NULL; pthread_t threads; /* clear screen */ system(__CLEAR_SCREEN__); if ( argc != 2 || (socket_server_port = strtol(argv[1], 0, 10)) == 0 ) usage(); /* make a socket */ socket_server_fd = socket(AF_INET, SOCK_STREAM, 0); if ( socket_server_fd == SOCKET_ERROR ) { printf("\nCould not make a socket\n"); return 0; } bzero((char *) &server_addr, sockaddr_in_size); bzero((char *) &accept_addr, sockaddr_in_size); /* fill address struct */ //server_addr.sin_addr.s_addr = inet_aton("10.15.20.42");//INADDR_ANY; //inet_aton(INADDR_ANY, &server_addr.sin_addr);//INADDR_ANY; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(socket_server_port); server_addr.sin_family = AF_INET; printf("\nBinding to port %d...\n", socket_server_port); /* bind to a port */ if ( bind(socket_server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == SOCKET_ERROR ) { printf("\nCould not connect to host\n"); exit(1); } /* get port number */ getsockname(socket_server_fd, (struct sockaddr *)&server_addr, (socklen_t *)&sockaddr_in_size); printf("\nopened socket as fd (%d) on port (%d) for stream i/o\n", socket_server_fd, ntohs(server_addr.sin_port)); printf("Server\n\ sin_family = %d\n\ sin_addr.s_addr = %d\n\ sin_port = %d\n" , server_addr.sin_family , server_addr.sin_addr.s_addr , ntohs(server_addr.sin_port) ); printf("\nMaking a listen queue of %d elements", QUEUE_SIZE); /* establish listen queue */ if ( listen(socket_server_fd, QUEUE_SIZE) == SOCKET_ERROR ) { printf("\nCould not listen\n"); return 0; } for ( ; ; ) { puts("\nWaiting for a connection\n"); /* get the connected socket */ socket_accept_fd = accept(socket_server_fd, (struct sockaddr *) &accept_addr, (socklen_t *) &sockaddr_in_size); if ( socket_accept_fd > -1 ) { /* char ip[46]; unsigned short port; printf("%d\n\n", inet_ntoa(server_addr.sin_addr.s_addr)); printf("%d\n\n", inet_ntoa(accept_addr.sin_addr.s_addr)); inet_ntop (AF_INET, &accept_addr.sin_addr, ip, sizeof (ip)); port = ntohs(accept_addr.sin_port); printf("connection from %s, port %hu\n", ip, port); */ /* if ( close(socket_accept_fd) == SOCKET_ERROR ) printf("\nCould not close socket\n"); */ if ( clients == (struct client *) NULL ) atual = clients; else while ( (atual = clients->next) != (struct client *) NULL ); atual = (struct client *) malloc(sizeof(struct client)); atual->next = (struct client *) NULL; atual->fd = socket_accept_fd; atual->sockaddr = accept_addr; atual->last = time(NULL); pthread_create(&threads, NULL, handler, (void *)atual); //clients = (struct client *)NULL; } puts("jah era #5"); } pthread_exit(NULL); } void * handler(void * pClient) { char pBuffer[BUFFER_SIZE]; struct client * client = (struct client *) pClient; int i = 0, err; time_t last; char ip[46]; unsigned short port; //printf("%d\n\n", inet_ntoa(client->fd)); //printf("%d\n\n", inet_ntoa(client->sockaddr.sin_addr.s_addr)); inet_ntop(AF_INET, &client->sockaddr.sin_addr, ip, sizeof (ip)); port = ntohs(client->sockaddr.sin_port); printf("\nGot a connection from %s, port %hu\n", ip, port); if ( close(client->fd) == SOCKET_ERROR ) { printf("\nCould not close socket\n"); return 0; } fflush(stdin); fflush(stdout); free(client); pthread_exit(NULL); /* last = time(NULL); while ( time(NULL) - client->last < 10 ) { printf("%s\n\n", "teste"); sleep(1); } client->last = time(NULL); */ /** * number returned by read() and write() is the number of bytes * read or written, with -1 being that an error occured * write what we received back to the server **/ /* strcpy(pBuffer, MESSAGE); printf("\nSending \"%s\" to client\n",pBuffer); write(client->hSocket, pBuffer, strlen(pBuffer)+1); */ /* read from socket into buffer */ /*read(client->hSocket, pBuffer, sizeof(pBuffer)); printf("Received from client: %s\n", pBuffer); if ( strcmp(pBuffer, MESSAGE) == 0 ) printf("The messages match\n"); else printf("Something was changed in the message\n"); */ /*while (i < 10) { printf("%d\n", i); usleep(1000000); i++; }*/ /* close socket */ /*printf("\nClosing the socket"); if ( close(client->hSocket) == SOCKET_ERROR ) { printf("\nCould not close socket\n"); return 0; } fflush(stdin); fflush(stdout); free(client); pthread_exit(NULL); */ }