[farsight2/master] transmitters: set the ToS field on outgoing packets

Olivier Crête olivier.crete at collabora.co.uk
Tue Jul 14 11:49:59 PDT 2009


Set the ToS field to the highest priority in the hope that this will help
reduce latency.
---
 transmitters/multicast/fs-multicast-transmitter.c |   11 ++++++++++-
 transmitters/rawudp/fs-rawudp-transmitter.c       |   11 ++++++++++-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/transmitters/multicast/fs-multicast-transmitter.c b/transmitters/multicast/fs-multicast-transmitter.c
index 0b7511c..00475cd 100644
--- a/transmitters/multicast/fs-multicast-transmitter.c
+++ b/transmitters/multicast/fs-multicast-transmitter.c
@@ -53,7 +53,7 @@
 #else /*G_OS_WIN32*/
 # include <netdb.h>
 # include <sys/socket.h>
-# include <netinet/in.h>
+# include <netinet/ip.h>
 # include <arpa/inet.h>
 #endif /*G_OS_WIN32*/
 
@@ -550,6 +550,7 @@ _bind_port (
 #else
   struct ip_mreq mreq;
 #endif
+  int tos, prio;
 
   address.sin_family = AF_INET;
   address.sin_addr.s_addr = INADDR_ANY;
@@ -638,6 +639,14 @@ _bind_port (
     goto error;
   }
 
+  tos = IPTOS_LOWDELAY;
+  if (setsockopt (sock, IPPROTO_IP, IP_TOS, &tos, sizeof (tos)) < 0)
+    GST_WARNING ("could not set TOS: %s", g_strerror (errno));
+
+  prio = 6;
+  if (setsockopt (sock, SOL_SOCKET, SO_PRIORITY, &prio, sizeof (tos)) < 0)
+    GST_WARNING ( "could not set socket priority: %s", g_strerror (errno));
+
   address.sin_port = htons (port);
   retval = bind (sock, (struct sockaddr *) &address, sizeof (address));
   if (retval != 0)
diff --git a/transmitters/rawudp/fs-rawudp-transmitter.c b/transmitters/rawudp/fs-rawudp-transmitter.c
index 4a1aab7..6de1fb0 100644
--- a/transmitters/rawudp/fs-rawudp-transmitter.c
+++ b/transmitters/rawudp/fs-rawudp-transmitter.c
@@ -53,7 +53,7 @@
 #else /*G_OS_WIN32*/
 # include <netdb.h>
 # include <sys/socket.h>
-# include <netinet/in.h>
+# include <netinet/ip.h>
 # include <arpa/inet.h>
 #endif /*G_OS_WIN32*/
 
@@ -548,6 +548,7 @@ _bind_port (
   int sock;
   struct sockaddr_in address;
   int retval;
+  int tos, prio;
 
   address.sin_family = AF_INET;
   address.sin_addr.s_addr = INADDR_ANY;
@@ -597,6 +598,14 @@ _bind_port (
 
   *used_port = port;
 
+  tos = IPTOS_LOWDELAY;
+  if (setsockopt (sock, IPPROTO_IP, IP_TOS, &tos, sizeof (tos)) < 0)
+    GST_WARNING ( "could not set TOS: %s", g_strerror (errno));
+
+  prio = 6;
+  if (setsockopt (sock, SOL_SOCKET, SO_PRIORITY, &prio, sizeof (tos)) < 0)
+    GST_WARNING ( "could not set socket priority: %s", g_strerror (errno));
+
   return sock;
 }
 
-- 
1.5.6.5




More information about the farsight-commits mailing list