X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=test.c;h=68b42b25e9ab19f122b4ae9425adc32b086d5342;hb=79771fe547709fd77c9364f843ab00ea9e7d6a25;hp=2784649bb5ef8a8767b079cb5bf2797099cb9386;hpb=67f92e296735cd36163e4e0a15315a9cfed13563;p=utcp diff --git a/test.c b/test.c index 2784649..68b42b2 100644 --- a/test.c +++ b/test.c @@ -31,21 +31,28 @@ double dropout; long total_out; long total_in; FILE *reference; -long mtu = 1300; +long mtu = 0; char *reorder_data; size_t reorder_len; int reorder_countdown; #if UTCP_DEBUG -void debug(const char *format, ...) { - struct timeval now; - gettimeofday(&now, NULL); - fprintf(stderr, "%lu.%lu ", now.tv_sec, now.tv_usec / 1000); +static void debug(const char *format, ...) { + struct timespec tv; + char buf[1024]; + int len; + + clock_gettime(CLOCK_REALTIME, &tv); + len = snprintf(buf, sizeof(buf), "%ld.%06lu ", (long)tv.tv_sec, tv.tv_nsec / 1000); va_list ap; va_start(ap, format); - vfprintf(stderr, format, ap); + len += vsnprintf(buf + len, sizeof(buf) - len, format, ap); va_end(ap); + + if(len > 0 && (size_t)len < sizeof(buf)) { + fwrite(buf, len, 1, stderr); + } } #else #define debug(...) do {} while(0) @@ -134,6 +141,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; + } + + debug("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)); @@ -240,10 +262,10 @@ int main(int argc, char *argv[]) { return 1; } - utcp_set_mtu(u, mtu); utcp_set_user_timeout(u, 10); if(!server) { + set_mtu(u, s); c = utcp_connect_ex(u, 1, do_recv, NULL, flags); } @@ -279,8 +301,8 @@ int main(int argc, char *argv[]) { if(fds[0].revents) { fds[0].revents = 0; - debug("stdin\n"); ssize_t len = read(0, buf, max); + debug("stdin %zd\n", len); if(len <= 0) { fds[0].fd = -1; @@ -308,20 +330,22 @@ int main(int argc, char *argv[]) { if(fds[1].revents) { fds[1].revents = 0; - debug("netin\n"); struct sockaddr_storage ss; socklen_t sl = sizeof(ss); int len = recvfrom(s, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr *)&ss, &sl); + debug("netin %zu\n", len); if(len <= 0) { debug("Error receiving UDP packet: %s\n", strerror(errno)); break; } - if(!connected) + if(!connected) { if(!connect(s, (struct sockaddr *)&ss, sl)) { connected = true; + set_mtu(u, s); } + } inpktno++;