X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=test.c;h=7dd5d248836bf6342e6049c1701bd1deb94e2e95;hb=72b3135830824e441d2dd5c23c030e5dd9f07f5a;hp=81f45a53fb82996933fd133735d18ffa494751c4;hpb=850542e9585f716985c25d5995ba5bcb2cc6ba87;p=utcp diff --git a/test.c b/test.c index 81f45a5..7dd5d24 100644 --- a/test.c +++ b/test.c @@ -31,6 +31,7 @@ double dropout; long total_out; long total_in; FILE *reference; +long mtu = 0; char *reorder_data; size_t reorder_len; @@ -133,6 +134,21 @@ ssize_t do_send(struct utcp *utcp, const void *data, size_t len) { return result; } +static void set_mtu(struct utcp *u, int s) { + if(!mtu) { + socklen_t optlen = sizeof(mtu); + getsockopt(s, IPPROTO_IP, IP_MTU, &mtu, &optlen); + } + + if(!mtu || mtu == 65535) { + mtu = 1500; + } + + fprintf(stderr, "Using MTU %lu\n", mtu); + + utcp_set_mtu(u, mtu ? mtu - 48 : 1300); +} + int main(int argc, char *argv[]) { srand(time(NULL)); srand48(time(NULL)); @@ -178,6 +194,10 @@ int main(int argc, char *argv[]) { read_size = atoi(getenv("READ_SIZE")); } + if(getenv("MTU")) { + mtu = atoi(getenv("MTU")); + } + char *reference_filename = getenv("REFERENCE"); if(reference_filename) { @@ -198,21 +218,28 @@ int main(int argc, char *argv[]) { getaddrinfo(server ? NULL : argv[1], server ? argv[1] : argv[2], &hint, &ai); if(!ai) { + debug("Could not lookup address: %s\n", strerror(errno)); return 1; } int s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if(s == -1) { + debug("Could not create socket: %s\n", strerror(errno)); return 1; } + static const int one = 1; + setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof one); + if(server) { if(bind(s, ai->ai_addr, ai->ai_addrlen)) { + debug("Could not bind: %s\n", strerror(errno)); return 1; } } else { if(connect(s, ai->ai_addr, ai->ai_addrlen)) { + debug("Could not connect: %s\n", strerror(errno)); return 1; } @@ -224,13 +251,14 @@ int main(int argc, char *argv[]) { struct utcp *u = utcp_init(server ? do_accept : NULL, NULL, do_send, &s); if(!u) { + debug("Could not initialize UTCP\n"); return 1; } - utcp_set_mtu(u, 1300); utcp_set_user_timeout(u, 10); if(!server) { + set_mtu(u, s); c = utcp_connect_ex(u, 1, do_recv, NULL, flags); } @@ -305,10 +333,12 @@ int main(int argc, char *argv[]) { break; } - if(!connected) + if(!connected) { if(!connect(s, (struct sockaddr *)&ss, sl)) { connected = true; + set_mtu(u, s); } + } inpktno++;