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 <pthread.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
void threadTest(void *arg) {
|
|
||||||
char* txt = (char*) arg;
|
|
||||||
puts(txt);
|
|
||||||
pthread_exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
// TODO: shell args
|
// TODO: shell args
|
||||||
pthread_t threadHandle;
|
// pthread_t threadHandle;
|
||||||
pthread_attr_t attr;
|
// pthread_attr_t attr;
|
||||||
pthread_attr_init(&attr);
|
// pthread_attr_init(&attr);
|
||||||
pthread_create(&threadHandle, &attr, (void *(*)(void *)) threadTest, "a");
|
// pthread_create(&threadHandle, &attr, (void *(*)(void *)) threadTest, "a");
|
||||||
void * ret;
|
// void * ret;
|
||||||
pthread_join(threadHandle, &ret);
|
// pthread_join(threadHandle, &ret);
|
||||||
printf("%d", ret);
|
// printf("%d", ret);
|
||||||
// server(1, 1);
|
server(1, 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
32
server.c
32
server.c
@ -9,8 +9,13 @@
|
|||||||
|
|
||||||
extern int errno;
|
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];
|
char clientMessage[MESSAGE_STRING_LENGTH], quote[MESSAGE_STRING_LENGTH];
|
||||||
|
int serverSocket = socket->handle;
|
||||||
|
struct sockaddr * clientAddress = socket->address;
|
||||||
|
unsigned long addressLength = socket->addressLength;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
// receive data
|
// 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;
|
int clientSocket;
|
||||||
char quote[MESSAGE_STRING_LENGTH] = "", clientMessage[MESSAGE_STRING_LENGTH] = "";
|
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);
|
listen(serverSocket, 5);
|
||||||
puts("server listening");
|
puts("server listening");
|
||||||
@ -120,9 +130,17 @@ void server(int tcp, int ipv6) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: threads to run both at the same time
|
// TODO: threads to run both at the same time
|
||||||
if (tcp) {
|
pthread_t tcpHandle, udpHandle;
|
||||||
tcpListen(server.handle, client.address, client.addressLength);
|
pthread_attr_t attr;
|
||||||
} else {
|
pthread_attr_init(&attr);
|
||||||
udpListen(server.handle, client.address, client.addressLength);
|
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 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
|
#endif //QOTD_SERVER_H
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user