From: muench Date: Fri, 18 Feb 2000 11:59:24 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=90b15653418559a923dc39ae0b31c3cbda3bed1a;p=daqdata.git *** empty log message *** --- diff --git a/hadaq/nettrans.c b/hadaq/nettrans.c index cc48d6a..cbbe329 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.8 1999-11-16 16:07:22 hades Rel $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.9 2000-02-18 11:59:24 muench Exp $"; #define _XOPEN_SOURCE_EXTENDED #include @@ -11,7 +11,10 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had #include #include #include +#include +#include #include +#include #include @@ -28,8 +31,47 @@ static int min(int a, int b) return a < b ? a : b; } -static int openUdp(NetTrans *my, const char *name, int fl) { - return -1; +static int openUdp(NetTrans *my, unsigned long addr, int port, int fl) { + int retVal; + struct sockaddr_in sa; + + assert(my != NULL); + + my->fd = socket(AF_INET, SOCK_DGRAM, 0); + + if (-1 == my->fd) { + retVal = -1; + } else { + switch (fl) { + case O_RDONLY: + sa.sin_family = AF_INET; + sa.sin_port = htons(port); + sa.sin_addr.s_addr = 0; + retVal = bind(my->fd, &sa, sizeof(sa)); + break; + case O_WRONLY: + sa.sin_family = AF_INET; + sa.sin_port = htons(port); + sa.sin_addr.s_addr = addr; + retVal = connect(my->fd, &sa, sizeof(sa)); + break; + default: + errno = EINVAL; + retVal = -1; + break; + } + + if (0 > retVal) { + close(my->fd); + } else { + my->mtuSize = 8192; + } + } + + if (0 > retVal) { + msglog(LOG_DEBUG, "openAtm: %s\n", strerror(errno)); + } + return retVal; } static int openAtm(NetTrans *my, int vpi, int vci, size_t bw, int fl) { @@ -68,6 +110,7 @@ static int openAtm(NetTrans *my, int vpi, int vci, size_t bw, int fl) { deleteLAtm(my->lAtm); } else { my->mtuSize = LAtm_mtu(my->lAtm); + my->fd = LAtm_fd(my->lAtm); } } @@ -99,8 +142,13 @@ int openGeneric(NetTrans *my, const char *name, int flags, size_t bandwidth) { my->type = NetTransType_atm; retVal = openAtm(my, vpi, vci, bandwidth, flags); } else if (strcmp(fam, "UDP") == 0) { + unsigned long addr; + int port; + + addr = inet_addr(pa); + port = atoi(ep); my->type = NetTransType_udp; - retVal = openUdp(my, name, flags); + retVal = openUdp(my, addr, port,flags); } else { my->type = NetTransType_invalid; errno = EINVAL; @@ -124,6 +172,10 @@ int closeGeneric(NetTrans *my) { deleteLAtm(my->lAtm); retVal = 0; break; + case NetTransType_udp: + close(my->fd); + retVal = 0; + break; } if (0 > retVal) { @@ -141,6 +193,9 @@ int sendGeneric(NetTrans *my) { case NetTransType_atm: retVal = LAtm_send(my->lAtm, my->pkt, Pkt_size(my->pkt)); break; + case NetTransType_udp: + retVal = send(my->fd, my->pkt, Pkt_size(my->pkt), 0); + break; } if (retVal != Pkt_size(my->pkt)) { @@ -162,6 +217,9 @@ int recvGeneric(NetTrans *my) { case NetTransType_atm: retVal = LAtm_recv(my->lAtm, my->pkt, my->mtuSize); break; + case NetTransType_udp: + retVal = recv(my->fd, my->pkt, my->mtuSize, 0); + break; } if (retVal != Pkt_size(my->pkt)) { @@ -389,13 +447,13 @@ unsigned long NetTrans_multiRecv(NetTrans *my[], void *hadTu[], size_t size[], i do { FD_ZERO(fdSet); for (i = 0; i < nrOfMsgs; i++) { - FD_SET(my[i]->lAtm->fd, fdSet); + FD_SET(my[i]->fd, fdSet); } if (0 > select(getdtablesize(), fdSet, NULL, NULL, NULL)) { abort(); } for (i = 0; i < nrOfMsgs; i++) { - if (FD_ISSET(my[i]->lAtm->fd, fdSet)) { + if (FD_ISSET(my[i]->fd, fdSet)) { if (assembleMsg(my[i], hadTu[i], size[i])) { msgIsComplete |= 1 << i; }