udp_connection_t *
udp_bind ( const char *subsystem, const char *name,
const char *bindaddr, int port,
- const char *ifname, int rxsize )
+ const char *ifname, int rxsize, int txsize )
{
int fd, ifindex, reuse = 1;
udp_connection_t *uc;
goto error;
}
- /* Increase RX buffer size */
- if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &rxsize, sizeof(rxsize)) == -1)
- tvhwarn(subsystem, "%s - cannot increase UDP rx buffer size [%s]",
+ /* Increase/Decrease RX buffer size */
+ if (rxsize > 0 &&
+ setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &rxsize, sizeof(rxsize)) == -1)
+ tvhwarn(subsystem, "%s - cannot change UDP rx buffer size [%s]",
+ name, strerror(errno));
+
+ /* Increase/Decrease TX buffer size */
+ if (txsize > 0 &&
+ setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &txsize, sizeof(txsize)) == -1)
+ tvhwarn(subsystem, "%s - cannot change UDP tx buffer size [%s]",
name, strerror(errno));
uc->fd = fd;
udp_bind_double ( udp_connection_t **_u1, udp_connection_t **_u2,
const char *subsystem, const char *name1,
const char *name2, const char *host, int port,
- const char *ifname, int rxsize1, int rxsize2 )
+ const char *ifname, int rxsize1, int rxsize2,
+ int txsize1, int txsize2 )
{
udp_connection_t *u1 = NULL, *u2 = NULL;
udp_connection_t *ucs[10];
memset(&ucs, 0, sizeof(ucs));
while (1) {
- u1 = udp_bind(subsystem, name1, host, port, ifname, rxsize1);
+ u1 = udp_bind(subsystem, name1, host, port, ifname, rxsize1, txsize1);
if (u1 == NULL || u1 == UDP_FATAL_ERROR)
goto fail;
port2 = ntohs(IP_PORT(u1->ip));
/* RTP port should be even, RTCP port should be odd */
if ((port2 % 2) == 0) {
- u2 = udp_bind(subsystem, name2, host, port2 + 1, ifname, rxsize2);
+ u2 = udp_bind(subsystem, name2, host, port2 + 1, ifname, rxsize2, txsize2);
if (u2 != NULL && u2 != UDP_FATAL_ERROR)
break;
}
udp_connection_t *
udp_bind ( const char *subsystem, const char *name,
const char *bindaddr, int port,
- const char *ifname, int rxsize );
+ const char *ifname, int rxsize, int txsize );
int
udp_bind_double ( udp_connection_t **_u1, udp_connection_t **_u2,
const char *subsystem, const char *name1,
const char *name2, const char *host, int port,
- const char *ifname, int rxsize1, int rxsize2 );
+ const char *ifname, int rxsize1, int rxsize2,
+ int txsize1, int txsize2 );
udp_connection_t *
udp_connect ( const char *subsystem, const char *name,
const char *host, int port,