-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.28 2003-05-14 13:54:44 muench Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.29 2003-11-03 16:49:09 muench Exp $";
#define _GNU_SOURCE
static int openUdp(NetTrans *my, unsigned long addr, int port, int fl)
{
int retVal;
- struct sockaddr_in sa;
assert(my != NULL);
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, (struct sockaddr *) &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, (struct sockaddr *) &sa, sizeof(sa));
- break;
- default:
- errno = EINVAL;
- retVal = -1;
- break;
- }
-
- if (0 > retVal) {
- close(my->fd);
- } else {
- my->mtuSize = 8192;
- }
+ my->spec.sa.sin_family = AF_INET;
+ my->spec.sa.sin_port = port;
+ my->spec.sa.sin_addr.s_addr = htonl(INADDR_ANY);
+ retVal = bind(my->fd, &my->spec.sa, sizeof(my->spec.sa));
+ my->spec.sa.sin_family = AF_INET;
+ my->spec.sa.sin_port = port;
+ my->spec.sa.sin_addr.s_addr = addr;
}
+ my->mtuSize = 8192;
if (0 > retVal) {
- syslog(LOG_DEBUG, "openAtm: %s", strerror(errno));
+ syslog(LOG_DEBUG, "openUdp: %s", strerror(errno));
}
return retVal;
}
syslog(LOG_DEBUG, "aal: %d; vpi: %d; vci: %d; bandwidth: %d",
lAtmAttr->aal, lAtmAttr->vpi, lAtmAttr->vci, lAtmAttr->peakBandwidth);
- my->lAtm = newLAtm("/dev/fa0", fl);
+ my->spec.lAtm = newLAtm("/dev/fa0", fl);
- if (NULL == my->lAtm) {
+ if (NULL == my->spec.lAtm) {
retVal = -1;
} else {
switch (fl) {
case O_RDONLY:
- retVal = LAtm_bind(my->lAtm, lAtmAttr);
+ retVal = LAtm_bind(my->spec.lAtm, lAtmAttr);
break;
case O_WRONLY:
- retVal = LAtm_connect(my->lAtm, lAtmAttr);
+ retVal = LAtm_connect(my->spec.lAtm, lAtmAttr);
break;
default:
errno = EINVAL;
}
if (0 > retVal) {
- deleteLAtm(my->lAtm);
+ deleteLAtm(my->spec.lAtm);
} else {
my->mtuSize = 60 * 0x400;
- my->fd = LAtm_fd(my->lAtm);
+ my->fd = LAtm_fd(my->spec.lAtm);
}
}
int port;
addr = inet_addr(pa);
- port = atoi(ep);
+ fprintf(stderr, "%d\n", addr);
+ port = htons(atoi(ep));
my->type = NetTransType_udp;
retVal = openUdp(my, addr, port, flags);
} else {
switch (my->type) {
case NetTransType_atm:
- deleteLAtm(my->lAtm);
+ deleteLAtm(my->spec.lAtm);
retVal = 0;
break;
case NetTransType_udp:
int sendGeneric(NetTrans *my)
{
int retVal;
+ socklen_t socklen = sizeof(my->spec.sa);
assert(NetTrans_invariant(my));
switch (my->type) {
case NetTransType_atm:
- retVal = LAtm_send(my->lAtm, my->pkt, my->pktSize);
+ retVal = LAtm_send(my->spec.lAtm, my->pkt, my->pktSize);
if (0 > retVal) {
LAtm_perror("LAtm_send");
}
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;
}
}
#endif
- retVal = send(my->fd, my->pkt, my->pktSize, 0);
break;
}
int recvGeneric(NetTrans *my)
{
int retVal;
+ socklen_t socklen = sizeof(my->spec.sa);
assert(NetTrans_invariant(my));
switch (my->type) {
case NetTransType_atm:
- retVal = LAtm_recv(my->lAtm, my->pkt, my->mtuSize);
+ retVal = LAtm_recv(my->spec.lAtm, my->pkt, my->mtuSize);
break;
case NetTransType_udp:
- retVal = recv(my->fd, my->pkt, my->mtuSize, 0);
+ retVal = recvfrom(my->fd, my->pkt, my->mtuSize, 0, &my->spec.sa, &socklen);
break;
}
int NetTrans_invariant(const NetTrans *my)
{
- return (
- my != NULL
- && (my->type == NetTransType_atm || my->type == NetTransType_udp)
- );
+ return (my != NULL && (my->type == NetTransType_atm || my->type == NetTransType_udp)
+ );
}
NetTrans *NetTrans_create(const char *name, size_t bandwidth, Worker *worker)