diff options
author | rodri <rgl@antares-labs.eu> | 2021-07-21 19:31:36 +0000 |
---|---|---|
committer | rodri <rgl@antares-labs.eu> | 2021-07-21 19:31:36 +0000 |
commit | 10f8e5542686760b772abf40929a51fb63afad93 (patch) | |
tree | ca8bc50957ade5f4846f6b77dedfeb0c37cda4be /musw.c | |
parent | d276cd9961e05c184d4fd653bb9e92a288a09ec3 (diff) | |
download | musw-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.c | 67 |
1 files changed, 67 insertions, 0 deletions
@@ -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); +} |