From c4903648aca283d172abc59fba571c775c2e3f8a Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Wed, 2 Nov 2022 11:58:22 -0400 Subject: [PATCH] started working on mbusd. Sketched out a threading api based on C11 threads --- Makefile | 6 ++++-- bin/mbusd.c | 37 +++++++++++++++++++++++++++++++++++++ inc/liba.h | 30 +++++++++++++++++++++--------- lib/a/Options.c | 2 +- lib/a/defaults/options.c | 2 +- lib/a/stdlib/smprintf.c | 2 +- 6 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 bin/mbusd.c diff --git a/Makefile b/Makefile index ca94ebb..d2c79de 100644 --- a/Makefile +++ b/Makefile @@ -7,11 +7,13 @@ clean: bins: libs -rules: rules.mk - include config.mk +rules: + ./mkrules $(OUTDIR) + rules.mk: ./mkrules $(OUTDIR) + include rules.mk include bin/rules.mk diff --git a/bin/mbusd.c b/bin/mbusd.c new file mode 100644 index 0000000..b417d74 --- /dev/null +++ b/bin/mbusd.c @@ -0,0 +1,37 @@ +#include + +#define MAX_CONNS 1024 + +char* Usage = "mbusd DIALSTR"; +long ConnectionMap[MAX_CONNS / sizeof(long)] = {0}; + +void OnNewClient(Int cfd) +{ + (void)cfd; +// int pid = fork(); +// if (pid < 0) +// { +// perror("fork"); +// } +// else if (pid == 0) +// { +//// dup2(cfd, 0); +//// dup2(cfd, 1); +//// dup2(cfd, 2); +//// exit(execvp(Command[0], Command)); +// } +// close(cfd); +} + +int main(int argc, char** argv) +{ + if (argc != 1) + { + Options_PrintHelp(); + return 1; + } + + Net_Serve(argv[0], OnNewClient); + + return 0; +} diff --git a/inc/liba.h b/inc/liba.h index ec96541..1310d93 100644 --- a/inc/liba.h +++ b/inc/liba.h @@ -59,15 +59,6 @@ typedef struct { Int Options_Parse(Int argc, char** argv); void Options_PrintHelp(void); -/* - Networking -*/ -Int Net_Announce(char* dialstr); -Int Net_Listen(Int fd, Int backlog); -Int Net_Accept(Int fd); -Int Net_Dial(char* dialstr); -void Net_Serve(char* dialstr, void (*on_client)(Int cfd)); - /* UTF8 Encoding and Decoding */ @@ -93,3 +84,24 @@ extern void set_option(Int sname, char* lname, char* arg); extern char* ARGV0; extern char* Usage; extern Option_T Options[]; + +/* + Networking +*/ +Int Net_Announce(char* dialstr); +Int Net_Listen(Int fd, Int backlog); +Int Net_Accept(Int fd); +Int Net_Dial(char* dialstr); +void Net_Serve(char* dialstr, void (*on_client)(Int cfd)); + +/* + Concurrency and Multithreading +*/ +typedef struct Thread Thread_T; + +Int Thread_Create(Thread_T* thr, void* (*func)(void*), void *arg ); +Thread_T Thread_Current(void); +void Thread_Yield(void); +void Thread_Exit(Int res); +Int Thread_Detach(Thread_T thread); +Int Thread_Join(Thread_T thread); \ No newline at end of file diff --git a/lib/a/Options.c b/lib/a/Options.c index 5a54aac..70b2626 100644 --- a/lib/a/Options.c +++ b/lib/a/Options.c @@ -196,7 +196,7 @@ void Options_PrintHelp(void) printf("usage: %s\n\n", Usage); } - /* prInt option help messages */ + /* print option help messages */ for (Int i = 0; Options[i].s || Options[i].l; i++) { int remain = padding; diff --git a/lib/a/defaults/options.c b/lib/a/defaults/options.c index 359b487..03c70f0 100644 --- a/lib/a/defaults/options.c +++ b/lib/a/defaults/options.c @@ -1,6 +1,6 @@ #include Option_T Options[] = { - { .s = 'h', .l = "help", .a = 0, .d = "prInt this help message" }, + { .s = 'h', .l = "help", .a = 0, .d = "print this help message" }, {0} }; \ No newline at end of file diff --git a/lib/a/stdlib/smprintf.c b/lib/a/stdlib/smprintf.c index 1045cbe..3cf802d 100644 --- a/lib/a/stdlib/smprintf.c +++ b/lib/a/stdlib/smprintf.c @@ -1,7 +1,7 @@ #include #include -char* smprIntf(const char* fmt, ...) +char* smprintf(const char* fmt, ...) { va_list args; va_start(args, fmt); -- 2.54.0