Merged in a bunch of patches that I got as reaction to the 3.99 release.
See the ChangeLog for details
diff --git a/net.c b/net.c
index e231964..c6aad71 100644
--- a/net.c
+++ b/net.c
@@ -384,9 +384,14 @@
 {
 	struct msghdr msg;
 
-	umove(tcp, addr, &msg);
-	tprintf("{msg_name=%s, msg_namelen=%u, msg_iov=%#lx, msg_iovlen=%u, ",
-		(char *) msg.msg_name, msg.msg_namelen,
+	if (umove(tcp, addr, &msg) < 0) {
+		tprintf("%#lx", addr);
+		return;
+	}
+	tprintf("{msg_name=");
+	printstr(tcp, (long) msg.msg_name, msg.msg_namelen);
+	tprintf(", msg_namelen=%u, msg_iov=%#lx, msg_iovlen=%u, ",
+		msg.msg_namelen,
 		(unsigned long) msg.msg_iov, msg.msg_iovlen);
 #ifdef HAVE_MSG_CONTROL
 	tprintf("msg_control=%#lx, msg_controllen=%u, msg_flags=%#x}",
@@ -706,17 +711,17 @@
 			break;
 #endif /* PF_IPX */
 		default:	
-			tprintf(", %lu", tcp->u_arg[2]);
+			tprintf("%lu", tcp->u_arg[2]);
 			break;
 		}
 	} else {
 		if (syserror(tcp)) {
-			tprintf("%#lx", tcp->u_arg[3]);
+			tprintf(", %#lx", tcp->u_arg[3]);
 			return 0;
 		}
 #ifdef LINUX
 		if (umoven(tcp, tcp->u_arg[3], sizeof fds, (char *) fds) < 0)
-			tprintf("[...]");
+			tprintf(", [...]");
 		else
 			tprintf(", [%u, %u]", fds[0], fds[1]);
 #endif /* LINUX */