#include #include #include #include #include #include #include #include #include #include "net9p.h" void net9p_listen_cr(void *_arg) { (void)_arg; printf("listen initializing...\n"); cr_begin(); printf("listen running...\n"); union { struct sockaddr_in in; struct sockaddr gen; } addr = {0}; addr.in.sin_family = AF_INET; addr.in.sin_port = htons(9001); int fd = socket(AF_INET, SOCK_STREAM|SOCK_NONBLOCK, 0); if (fd < 0) error(1, errno, "socket"); if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) < 0) error(1, errno, "setsockopt"); if (bind(fd, &addr.gen, sizeof addr) < 0) error(1, errno, "bind"); if (listen(fd, 5) < 0) error(1, errno, "listen"); int conn = 9; if (!coroutine_add(net9p_worker_cr, &conn)) error(1, 0, "coroutine_add(net9p_worker_cr, &%d)", conn); printf("im back...\n"); for (int i = 0; i < 10; i++) { cr_yield(); } cr_end(); } void net9p_worker_cr(void *_arg) { int fd = *((int *)_arg); printf("worker %zu initializing...\n", cr_getcid()); cr_begin(); printf("worker %zu running...\n", cr_getcid()); //close(fd); cr_end(); }