From: hadaq Date: Tue, 4 Nov 2003 09:46:02 +0000 (+0000) Subject: LynxOS does not block in sendto, but gives "no buffer space" error. X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=d46d679f1a75135068af234ab23d922fbadd97b5;p=daqdata.git LynxOS does not block in sendto, but gives "no buffer space" error. So wait a little in that case. --- diff --git a/hadaq/nettrans.c b/hadaq/nettrans.c index d761f87..b57a655 100644 --- a/hadaq/nettrans.c +++ b/hadaq/nettrans.c @@ -1,4 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.30 2003-11-04 08:55:47 hadaq Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.31 2003-11-04 09:46:02 hadaq Exp $"; #define _GNU_SOURCE @@ -132,7 +132,6 @@ int openGeneric(NetTrans *my, const char *name, int flags, size_t bandwidth) int port; addr = inet_addr(pa); - fprintf(stderr, "%d\n", addr); port = htons(atoi(ep)); my->type = NetTransType_udp; retVal = openUdp(my, addr, port, flags); @@ -187,18 +186,14 @@ int sendGeneric(NetTrans *my) } break; case NetTransType_udp: - retVal = sendto(my->fd, my->pkt, my->pktSize, 0, &my->spec.sa, socklen); -#if 0 /* This limits the output data rate to 100 * mtuSize / s */ - { - static int i = 0; - if (i++ % 2 != 0) { - struct timespec tS, *t = &tS; - t->tv_sec = 0; - t->tv_nsec = 020000000; - nanosleep(t, NULL); - } + for (retVal = sendto(my->fd, my->pkt, my->pktSize, 0, &my->spec.sa, socklen); + 0 > retVal && errno == ENOBUFS; retVal = sendto(my->fd, my->pkt, my->pktSize, 0, &my->spec.sa, socklen) + ) { + struct timespec tS, *t = &tS; + t->tv_sec = 0; + t->tv_nsec = 020000000; + nanosleep(t, NULL); } -#endif break; } @@ -206,7 +201,7 @@ int sendGeneric(NetTrans *my) retVal = -1; } if (0 > retVal) { - syslog(LOG_DEBUG, "sendGeneric: %s", strerror(errno)); + syslog(LOG_DEBUG, "sendGeneric: %s (%d)", strerror(errno), errno); } return retVal; }