threads wip

This commit is contained in:
Arthur-Coppey 2022-04-15 12:10:42 +02:00
parent ee2eecf6a2
commit cea7131f77
3 changed files with 36 additions and 23 deletions

23
main.c
View File

@ -1,22 +1,17 @@
//#include "server.h"
#include "server.h"
#include <pthread.h>
#include <stdio.h>
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;
}

View File

@ -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);
// }
}

View File

@ -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