Vanilla Development Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CVS update: Vanilla/ntserv



Date:	Tuesday February 22, 19100 @ 20:39
Author:	xyzzy

Update of /home/netrek/cvsroot/Vanilla/ntserv
In directory swashbuckler.fortress.real-time.com:/var/tmp/cvs-serv30451

Modified Files:
	socket.c 
Log Message:
Bind UDP socket to the same interface as the TCP socket uses.  Needed for
multi-homed servers.


****************************************

Index: Vanilla/ntserv/socket.c
diff -u Vanilla/ntserv/socket.c:1.17 Vanilla/ntserv/socket.c:1.18
--- Vanilla/ntserv/socket.c:1.17	Fri Jul 23 17:09:13 1999
+++ Vanilla/ntserv/socket.c	Tue Feb 22 20:39:09 2000
@@ -1,4 +1,4 @@
-/* $Id: socket.c,v 1.17 1999/07/23 22:09:13 ahn Exp $
+/* $Id: socket.c,v 1.18 2000/02/23 02:39:09 xyzzy Exp $
  */
 
 /*
@@ -2279,8 +2279,16 @@
     }
 
 #ifdef UDP_FIX 			/* 15/6/93 SK UDP connection time out fix */
-    addr.sin_family = AF_INET;
-    addr.sin_addr.s_addr = INADDR_ANY;
+    /* Bind to interface used by the TCP socket 10/13/99 TAP *?
+    len = sizeof(addr);
+    if (getsockname(sock, (struct sockaddr *)&addr, &len) < 0) {
+	perror("netrek: unable to getsockname(TCP)");
+	UDPDIAG(("Can't get our own socket; using default interface\n"));
+	addr.sin_family = AF_INET;
+	addr.sin_addr.s_addr = INADDR_ANY;
+    } else {
+	UDPDIAG(("Using interface 0x%x\n", ntohl(addr.sin_addr.s_addr)));
+    }
     addr.sin_port = 0;
 
     if (bind(udpSock, &addr, sizeof(addr)) < 0) {