Index: src/util/network.c
===================================================================
--- src/util/network.c	(revision 29604)
+++ src/util/network.c	(working copy)
@@ -393,7 +393,21 @@
                             int flags)
 {
   int ret;
+  socklen_t bind_address_len = address_len;
 
+#ifdef LINUX
+  if (address->sa_family == AF_UNIX)
+  {
+    const struct sockaddr_un *address_un = (const struct sockaddr_un *)address;
+    if (address_un->sun_path[0] == '\0')
+      bind_address_len = \
+          sizeof (struct sockaddr_un) \
+        - sizeof (address_un->sun_path) \
+        + strnlen (address_un->sun_path + 1, sizeof (address_un->sun_path) - 1) \
+        + 1;
+  }
+#endif
+
 #ifdef IPV6_V6ONLY
 #ifdef IPPROTO_IPV6
   {
@@ -427,7 +441,7 @@
   }
 #endif
 #endif
-  ret = bind (desc->fd, address, address_len);
+  ret = bind (desc->fd, address, bind_address_len);
 #ifdef MINGW
   if (SOCKET_ERROR == ret)
     SetErrnoFromWinsockError (WSAGetLastError ());
@@ -544,6 +558,18 @@
 {
   int ret;
 
+#ifdef LINUX
+  if (address->sa_family == AF_UNIX)
+  {
+    const struct sockaddr_un *address_un = (const struct sockaddr_un *)address;
+    if(address_un->sun_path[0] == '\0')
+      address_len = \
+          sizeof (struct sockaddr_un) \
+        - sizeof (address_un->sun_path) \
+        + strnlen (address_un->sun_path + 1, sizeof (address_un->sun_path) - 1) \
+        + 1;
+  }
+#endif
   ret = connect (desc->fd, address, address_len);
 
 #ifdef MINGW
@@ -768,6 +794,18 @@
 #ifdef MSG_NOSIGNAL
   flags |= MSG_NOSIGNAL;
 #endif
+#ifdef LINUX
+  if (dest_addr->sa_family == AF_UNIX)
+  {
+    const struct sockaddr_un *dest_addr_un = (const struct sockaddr_un *)dest_addr;
+    if (dest_addr_un->sun_path[0] == '\0')
+      dest_len = \
+          sizeof (struct sockaddr) \
+        - sizeof (dest_addr_un->sun_path) \
+        + strnlen (dest_addr_un->sun_path + 1, sizeof (dest_addr_un->sun_path) - 1) \
+        + 1;
+  }
+#endif
   ret = sendto (desc->fd, message, length, flags, dest_addr, dest_len);
 #ifdef MINGW
   if (SOCKET_ERROR == ret)
