/*
- * Copyright (C) 2005-2009 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
/** \file udp_send.c Para_server's udp sender. */
+#include <regex.h>
#include <sys/time.h>
#include <dirent.h>
#include <sys/socket.h>
#include <net/if.h>
+#include <osl.h>
#include "server.cmdline.h"
#include "para.h"
if (ut->fd >= 0) /* nothing to do */
return 0;
- ret = makesock(AF_UNSPEC, IPPROTO_UDP, 0, ut->host, ut->port);
+ ret = para_connect_simple(IPPROTO_UDP, ut->host, ut->port);
if (ret < 0)
return ret;
ut->fd = ret;
}
add_close_on_fork_list(ut->fd);
ut->cq = cq_new(UDP_CQ_BYTES);
- PARA_NOTICE_LOG("sending to udp %s#%d using fec parms %d:%d:%d\n",
- ut->host, ut->port , ut->fcp.max_slice_bytes,
- ut->fcp.data_slices_per_group, ut->fcp.slices_per_group);
+ PARA_NOTICE_LOG("sending to udp %s#%d\n", ut->host, ut->port);
return 1;
}
if (ret < 0)
goto fail;
ret = send_queued_chunks(ut->fd, ut->cq, 0);
+ if (ret == -ERRNO_TO_PARA_ERROR(ECONNREFUSED))
+ ret = 0;
if (ret < 0)
goto fail;
if (!len)
return 0;
if (!ret) { /* still data left in the queue */
- ret = cq_enqueue(ut->cq, buf, len);
- if (ret < 0)
- goto fail;
+ ret = cq_force_enqueue(ut->cq, buf, len);
+ assert(ret >= 0);
}
ret = write_nonblock(ut->fd, buf, len, 0);
+ if (ret == -ERRNO_TO_PARA_ERROR(ECONNREFUSED))
+ ret = 0;
if (ret < 0)
goto fail;
if (ret != len) {
- ret = cq_enqueue(ut->cq, buf + ret, len - ret);
- if (ret < 0)
- goto fail;
+ ret = cq_force_enqueue(ut->cq, buf + ret, len - ret);
+ assert(ret >= 0);
}
return 1;
fail:
ret = make_message(
"udp sender:\n"
"\tstatus: %s\n"
- "\tport: udp %d\n"
+ "\tport: %s\n"
"\ttargets: %s\n",
(sender_status == SENDER_ON)? "on" : "off",
- conf.udp_default_port_arg,
+ stringify_port(conf.udp_default_port_arg, "udp"),
tgts? tgts : "(none)"
);
free(tgts);
/**
* The init function of para_server's udp sender.
*
- * \param s Pointer to the http sender struct.
+ * \param s Pointer to the udp sender struct.
*
* It initializes all function pointers of \a s and the list of udp targets.
*/