diff options
Diffstat (limited to 'iemnet_sender.c')
-rw-r--r-- | iemnet_sender.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/iemnet_sender.c b/iemnet_sender.c index a45ae10..552f133 100644 --- a/iemnet_sender.c +++ b/iemnet_sender.c @@ -47,14 +47,28 @@ struct _iemnet_sender { /* the workhorse of the family */ static int iemnet__sender_dosend(int sockfd, t_iemnet_queue*q) { + struct sockaddr_in to; + socklen_t tolen = sizeof(to); + t_iemnet_chunk*c=queue_pop_block(q); if(c) { unsigned char*data=c->data; unsigned int size=c->size; + int result=-1; + // fprintf(stderr, "sending %d bytes at %x to %d\n", size, data, sockfd); - DEBUG("sending %d bytes", size); - result = send(sockfd, data, size, 0); + if(c->port) { + DEBUG("sending %d bytes to %x:%d", size, c->addr, c->port); + + to.sin_addr.s_addr=htonl(c->addr); + to.sin_port =htons(c->port); + + result = sendto(sockfd, data, size, 0, (struct sockaddr *)&to, tolen); + } else { + DEBUG("sending %d bytes", size); + result = send(sockfd, data, size, 0); + } if(result<0) { // broken pipe return 0; @@ -103,6 +117,7 @@ void iemnet__sender_destroy(t_iemnet_sender*s) { if(!s->keepsending)return; DEBUG("destroy sender %x", s); + s->keepsending=0; queue_finish(s->queue); DEBUG("queue finished"); @@ -119,6 +134,8 @@ void iemnet__sender_destroy(t_iemnet_sender*s) { s=NULL; DEBUG("destroyed sender"); } + + t_iemnet_sender*iemnet__sender_create(int sock) { t_iemnet_sender*result=(t_iemnet_sender*)getbytes(sizeof(t_iemnet_sender)); int res=0; |