threads wip
This commit is contained in:
parent
ee2eecf6a2
commit
cea7131f77
23
main.c
23
main.c
@ -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;
|
||||
}
|
||||
|
||||
32
server.c
32
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);
|
||||
// }
|
||||
}
|
||||
|
||||
4
server.h
4
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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user