diff --git a/main.c b/main.c index 809add9..0646725 100644 --- a/main.c +++ b/main.c @@ -1,22 +1,17 @@ -//#include "server.h" +#include "server.h" #include #include -void threadTest(void *arg) { - char* txt = (char*) arg; - puts(txt); - pthread_exit(0); -} int main(int argc, char *argv[]) { // TODO: shell args - pthread_t threadHandle; - pthread_attr_t attr; - pthread_attr_init(&attr); - pthread_create(&threadHandle, &attr, (void *(*)(void *)) threadTest, "a"); - void * ret; - pthread_join(threadHandle, &ret); - printf("%d", ret); -// server(1, 1); +// pthread_t threadHandle; +// pthread_attr_t attr; +// pthread_attr_init(&attr); +// pthread_create(&threadHandle, &attr, (void *(*)(void *)) threadTest, "a"); +// void * ret; +// pthread_join(threadHandle, &ret); +// printf("%d", ret); + server(1, 1); return 0; } diff --git a/server.c b/server.c index 55cc6a8..92edc8d 100644 --- a/server.c +++ b/server.c @@ -9,8 +9,13 @@ extern int errno; -_Noreturn void udpListen(int serverSocket, struct sockaddr * clientAddress, unsigned long addressLength) { +_Noreturn void udpListen(void * sock) { + struct sockinfo * socket = (struct sockinfo *) sock; + char clientMessage[MESSAGE_STRING_LENGTH], quote[MESSAGE_STRING_LENGTH]; + int serverSocket = socket->handle; + struct sockaddr * clientAddress = socket->address; + unsigned long addressLength = socket->addressLength; for (;;) { // receive data @@ -30,9 +35,14 @@ _Noreturn void udpListen(int serverSocket, struct sockaddr * clientAddress, unsi } } -void tcpListen(int serverSocket, struct sockaddr * clientAddress, unsigned long addressLength) { +void tcpListen(void * sock) { + struct sockinfo * socket = (struct sockinfo *) sock; + int clientSocket; char quote[MESSAGE_STRING_LENGTH] = "", clientMessage[MESSAGE_STRING_LENGTH] = ""; + int serverSocket = socket->handle; + struct sockaddr * clientAddress = socket->address; + unsigned long addressLength = socket->addressLength; listen(serverSocket, 5); puts("server listening"); @@ -120,9 +130,17 @@ void server(int tcp, int ipv6) { } // TODO: threads to run both at the same time - if (tcp) { - tcpListen(server.handle, client.address, client.addressLength); - } else { - udpListen(server.handle, client.address, client.addressLength); - } + pthread_t tcpHandle, udpHandle; + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_create(&tcpHandle, &attr, (void *(*)(void *)) tcpListen, (void *) &server); + pthread_create(&udpHandle, &attr, (void *(*)(void *)) udpListen, (void *) &server); + void * tcpReturn, * udpReturn; + pthread_join(tcpHandle, tcpReturn); + pthread_join(udpHandle, udpReturn); +// if (tcp) { +// tcpListen(&server); +// } else { +// udpListen(&server); +// } } diff --git a/server.h b/server.h index 7430dda..3a129f3 100644 --- a/server.h +++ b/server.h @@ -26,8 +26,8 @@ struct sockinfo { void server(int tcp, int ipv6); -void tcpListen(int serverSocket, struct sockaddr *clientAddress, unsigned long addressLength); +void tcpListen(void * socket); -_Noreturn void udpListen(int serverSocket, struct sockaddr *clientAddress, unsigned long addressLength); +_Noreturn void udpListen(void * socket); #endif //QOTD_SERVER_H