diff -urN libvirt-0.6.5/src/remote_internal.c libvirt-0.6.5-socat/src/remote_internal.c
--- libvirt-0.6.5/src/remote_internal.c	2009-07-01 04:22:39.000000000 -0400
+++ libvirt-0.6.5-socat/src/remote_internal.c	2009-07-08 14:48:23.000000000 -0400
@@ -721,12 +721,26 @@
             cmd_argv[j++] = strdup ("none");
         }
         cmd_argv[j++] = strdup (priv->hostname);
-        cmd_argv[j++] = strdup (netcat ? netcat : "nc");
-        cmd_argv[j++] = strdup ("-U");
-        cmd_argv[j++] = strdup (sockname ? sockname :
+        if (netcat) {
+            cmd_argv[j++] = strdup (netcat);
+            cmd_argv[j++] = strdup ("-U");
+            cmd_argv[j++] = strdup (sockname ? sockname :
                                 (flags & VIR_CONNECT_RO
                                  ? LIBVIRTD_PRIV_UNIX_SOCKET_RO
                                  : LIBVIRTD_PRIV_UNIX_SOCKET));
+        } else { //Use socat, since some distros hate nc
+            char *socat_addr = 0;
+            cmd_argv[j++] = strdup ("socat");
+            cmd_argv[j++] = strdup ("-");
+            if ((asprintf (&socat_addr, "GOPEN:%s",sockname ? sockname :
+                    (flags & VIR_CONNECT_RO
+                    ? LIBVIRTD_PRIV_UNIX_SOCKET_RO
+                    : LIBVIRTD_PRIV_UNIX_SOCKET))) < 0) {
+                error (conn, VIR_ERR_SYSTEM_ERROR, strerror (ENOMEM));
+                goto failed;
+            }
+            cmd_argv[j++] = socat_addr;
+        }
         cmd_argv[j++] = 0;
         assert (j == nr_args);
         for (j = 0; j < (nr_args-1); j++)
Binary files libvirt-0.6.5/src/.remote_internal.c.swp and libvirt-0.6.5-socat/src/.remote_internal.c.swp differ