coroutine void client(const char *requested, const char *expected) { ipaddr addr = ipremote("127.0.0.1", 5555, 0, -1); wsock s = wsockconnect(addr, requested, "/", -1); assert(s); assert(wsock_str_eq(wsocksubprotocol(s), expected)); wsockclose(s); }
coroutine void client2(int port) { ipaddr addr = ipremote("127.0.0.1", port, 0, -1); sslsock conn = sslconnect(addr, -1); assert(conn); msleep(now() + 100); sslclose(conn); }
coroutine void client(int port) { ipaddr addr = ipremote("127.0.0.1", port, 0, -1); tcpsock cs = tcpconnect(addr, -1); assert(cs); char ipstr[16] = {0}; ipaddrstr(addr, ipstr); assert(errno == 0); assert(strcmp(ipstr, "127.0.0.1") == 0); int fd = tcpdetach(cs); assert(fd != -1); cs = tcpattach(fd, 0); assert(cs); msleep(now() + 100); char buf[16]; size_t sz = tcprecv(cs, buf, 3, -1); assert(sz == 3 && buf[0] == 'A' && buf[1] == 'B' && buf[2] == 'C'); sz = tcpsend(cs, "123\n45\n6789", 11, -1); assert(sz == 11 && errno == 0); tcpflush(cs, -1); assert(errno == 0); tcpclose(cs); }
void doconnect(void) { ipaddr addr = ipremote("127.0.0.1", 5557, 0, -1); tcpsock s = tcpmuxconnect(addr, "foo", -1); assert(s); tcpsend(s, "abc", 3, -1); assert(errno == 0); tcpflush(s, -1); assert(errno == 0); }
int main(int argc, char *argv[]) { int opt; int clients = 100; int messages = 10000; int port = 5000; const char *host; while (-1 != (opt = getopt(argc, argv, "c:h:p:"))) { switch (opt) { case 'c': clients = atoi(optarg); break; case 'h': messages = atoi(optarg); break; case 'p': port = atoi(optarg); break; default: fprintf(stderr, "Unknown option: %c\n", opt); return 2; } } if (optind >= argc) { fprintf(stderr, "usage: client-libmill [-c clients] [-h messages per client] [-p port] host\n"); return 2; } host = argv[optind]; ipaddr addr = ipremote(host, port, 0, -1); chan results = chmake(int, 0); int64_t start_time = now(); for (int i = 0; i < clients; ++i) go(client(addr, messages, results)); int success = 0; for (int i = 0; i < clients; ++i) success += chr(results, int); int64_t elapsed = now() - start_time; printf("Throughput: %.2lf [#/sec]\n", success * 1000.0 / elapsed); return 0; }
int main() { udpsock s1 = udplisten(iplocal(NULL, 5555, 0)); udpsock s2 = udplisten(iplocal(NULL, 5556, 0)); ipaddr addr = ipremote("127.0.0.1", 5556, 0, -1); while(1) { udpsend(s1, addr, "ABC", 3); assert(errno == 0); char buf[3]; size_t sz = udprecv(s2, &addr, buf, sizeof(buf), now() + 100); if(errno == ETIMEDOUT) continue; assert(errno == 0); assert(sz == 3); break; } while(1) { udpsend(s2, addr, "DEF", 3); assert(errno == 0); char buf[3]; size_t sz = udprecv(s1, &addr, buf, sizeof(buf), now() + 100); if(errno == ETIMEDOUT) continue; assert(errno == 0); assert(sz == 3); break; } udpclose(s2); udpclose(s1); return 0; }
coroutine void badclient(const char *requested, int expected) { ipaddr addr = ipremote("127.0.0.1", 5555, 0, -1); wsock s = wsockconnect(addr, requested, "/", -1); assert(!s); assert(errno == expected); }