aboutsummaryrefslogtreecommitdiff
path: root/musw.c
diff options
context:
space:
mode:
authorrodri <rgl@antares-labs.eu>2021-07-21 19:31:36 +0000
committerrodri <rgl@antares-labs.eu>2021-07-21 19:31:36 +0000
commit10f8e5542686760b772abf40929a51fb63afad93 (patch)
treeca8bc50957ade5f4846f6b77dedfeb0c37cda4be /musw.c
parentd276cd9961e05c184d4fd653bb9e92a288a09ec3 (diff)
downloadmusw-10f8e5542686760b772abf40929a51fb63afad93.tar.gz
musw-10f8e5542686760b772abf40929a51fb63afad93.tar.bz2
musw-10f8e5542686760b772abf40929a51fb63afad93.zip
implemented very basic server broadcasting.
got rid of unnecessary (at least for now) code. brought some e-funcs.
Diffstat (limited to 'musw.c')
-rw-r--r--musw.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/musw.c b/musw.c
index e69de29..f58765c 100644
--- a/musw.c
+++ b/musw.c
@@ -0,0 +1,67 @@
+#include <u.h>
+#include <libc.h>
+#include <thread.h>
+#include "dat.h"
+#include "fns.h"
+
+void
+threadnetin(void *arg)
+{
+ char buf[256];
+ int fd, n;
+ Ioproc *io;
+
+ fd = *((int*)arg);
+ io = ioproc();
+
+ while((n = ioread(io, fd, buf, sizeof buf)) > 0)
+ if(iowrite(io, 1, buf, n) != n)
+ fprint(2, "iowrite: %r\n");
+ closeioproc(io);
+}
+
+void
+threadnetout(void *arg)
+{
+ char buf[256];
+ int fd, n;
+ Ioproc *io;
+
+ fd = *((int*)arg);
+ io = ioproc();
+
+ while((n = ioread(io, 0, buf, sizeof buf)) > 0)
+ if(iowrite(io, fd, buf, n) != n)
+ fprint(2, "iowrite: %r\n");
+ closeioproc(io);
+}
+
+void
+usage(void)
+{
+ fprint(2, "usage: %s [-d] server\n", argv0);
+ threadexitsall("usage");
+}
+
+void
+threadmain(int argc, char *argv[])
+{
+ char *server;
+ int fd;
+
+ ARGBEGIN{
+ default:
+ usage();
+ }ARGEND;
+ if(argc != 1)
+ usage();
+ server = argv[0];
+
+ fd = dial(server, nil, nil, nil);
+ if(fd < 0)
+ sysfatal("dial: %r");
+
+ threadcreate(threadnetin, &fd, 4096);
+ threadcreate(threadnetout, &fd, 4096);
+ threadexits(nil);
+}