int main(void) { /* Test conversion of string to IPv4 address and back again. */ struct ipaddr addr; int rc = ipaddr_local(&addr, "1.2.3.4", 5555, 0); errno_assert(rc == 0); int family = ipaddr_family(&addr); assert(family == AF_INET); const struct sockaddr_in *sin = (const struct sockaddr_in*)ipaddr_sockaddr(&addr); uint32_t a = *(uint32_t*)(&sin->sin_addr); assert(ntohl(a) == 0x01020304); assert(ntohs(sin->sin_port) == 5555); int port = ipaddr_port(&addr); assert(port == 5555); char buf[IPADDR_MAXSTRLEN]; ipaddr_str(&addr, buf); assert(strcmp(buf, "1.2.3.4") == 0); /* Test conversion of string to IPv6 address and back again. */ rc = ipaddr_local(&addr, "::1", 5555, 0); errno_assert(rc == 0); family = ipaddr_family(&addr); assert(family == AF_INET6); const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6*)ipaddr_sockaddr(&addr); assert(ntohs(sin6->sin6_port) == 5555); port = ipaddr_port(&addr); assert(port == 5555); ipaddr_str(&addr, buf); assert(strcmp(buf, "::1") == 0); return 0; }
int main(int argc, char *argv[]) { int port = 5555; if(argc > 1) port = atoi(argv[1]); struct ipaddr addr; int rc = ipaddr_local(&addr, NULL, port, 0); assert(rc == 0); int ls = tcp_listen(&addr, 10); if(ls < 0) { perror("Can't open listening socket"); return 1; } int b = bundle(); assert(b >= 0); int i; for(i = 0; i != 3; i++) { int s = tcp_accept(ls, NULL, -1); assert(s >= 0); s = suffix_attach(s, "\r\n", 2); assert(s >= 0); rc = bundle_go(b, dialogue(s)); assert(rc == 0); } rc = hclose(b); assert(rc == 0); rc = hclose(ls); assert(rc == 0); return 0; }
int main(int argc, char *argv[]) { int port = 5555; if(argc > 1) port = atoi(argv[1]); struct ipaddr addr; int rc = ipaddr_local(&addr, NULL, port, 0); assert(rc == 0); int ls = tcp_listen(&addr, 10); if(ls < 0) { perror("Can't open listening socket"); return 1; } int ch[2]; rc = chmake(ch); assert(rc == 0); int cr = go(statistics(ch[0])); assert(cr >= 0); int b = bundle(); assert(b >= 0); int i; for(i = 0; i != 3; i++) { int s = tcp_accept(ls, NULL, -1); assert(s >= 0); s = suffix_attach(s, "\r\n", 2); assert(s >= 0); rc = bundle_go(b, dialogue(s, ch[1])); assert(rc == 0); } rc = bundle_wait(b, now() + 10000); assert(rc == 0 || (rc < 0 && errno == ETIMEDOUT)); rc = hclose(b); assert(rc == 0); rc = hclose(cr); assert(rc == 0); rc = hclose(ch[0]); assert(rc == 0); rc = hclose(ch[1]); assert(rc == 0); rc = hclose(ls); assert(rc == 0); return 0; }
int main() { ipaddr addr; int rc = ipaddr_local(&addr, NULL, 5555, 0); assert(rc == 0); int ls = tcp_listen(&addr, 10); assert(ls >= 0); go(client()); int as = tcp_accept(ls, NULL, -1); int cs = crlf_start(as); assert(cs >= 0); char buf[16]; ssize_t sz = mrecv(cs, buf, sizeof(buf), -1); assert(sz == 3); assert(buf[0] == 'A' && buf[1] == 'B' && buf[2] == 'C'); rc = msend(cs, "GHI", 3, -1); assert(rc == 0); sz = mrecv(cs, buf, sizeof(buf), -1); assert(sz == 3); assert(buf[0] == 'D' && buf[1] == 'E' && buf[2] == 'F'); int ts = crlf_stop(cs, -1); assert(ts >= 0); rc = hclose(ts); assert(rc == 0); int h[2]; rc = unix_pair(h); assert(rc == 0); int s0 = crlf_start(h[0]); assert(s0 >= 0); int s1 = crlf_start(h[1]); assert(s1 >= 0); rc = msend(s0, "First", 5, -1); assert(rc == 0); rc = msend(s0, "Second", 6, -1); assert(rc == 0); rc = msend(s0, "Third", 5, -1); assert(rc == 0); rc = crlf_done(s0, -1); assert(rc == 0); sz = mrecv(s1, buf, sizeof(buf), -1); assert(sz == 5 && memcmp(buf, "First", 5) == 0); sz = mrecv(s1, buf, sizeof(buf), -1); assert(sz == 6 && memcmp(buf, "Second", 5) == 0); sz = mrecv(s1, buf, sizeof(buf), -1); assert(sz == 5 && memcmp(buf, "Third", 5) == 0); sz = mrecv(s1, buf, sizeof(buf), -1); assert(sz < 0 && errno == EPIPE); rc = msend(s1, "Red", 3, -1); assert(rc == 0); rc = msend(s1, "Blue", 4, -1); assert(rc == 0); rc = crlf_stop(s1, -1); assert(rc == h[1]); sz = mrecv(s0, buf, sizeof(buf), -1); assert(sz == 3 && memcmp(buf, "Red", 3) == 0); sz = mrecv(s0, buf, sizeof(buf), -1); assert(sz == 4 && memcmp(buf, "Blue", 4) == 0); sz = mrecv(s0, buf, sizeof(buf), -1); assert(sz < 0 && errno == EPIPE); rc = crlf_stop(s0, -1); assert(rc == h[0]); rc = hclose(h[1]); assert(rc == 0); rc = hclose(h[0]); assert(rc == 0); return 0; }