[kaffe] CVS kaffe (guilhem): FreeBSD NET fixes.

Kaffe CVS Kaffe Mailing List <kaffe@kaffe.org>
Tue Nov 4 12:45:02 2003


PatchSet 4156 
Date: 2003/11/04 20:42:39
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
FreeBSD NET fixes.

Members: 
	ChangeLog:1.1748->1.1749 
	libraries/clib/net/PlainDatagramSocketImpl.c:1.34->1.35 
	libraries/clib/net/PlainSocketImpl.c:1.35->1.36 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1748 kaffe/ChangeLog:1.1749
--- kaffe/ChangeLog:1.1748	Mon Nov  3 05:57:40 2003
+++ kaffe/ChangeLog	Tue Nov  4 20:42:39 2003
@@ -1,4 +1,15 @@
+2003-11-04  Guilhem Lavaux <guilhem@kaffe.org>
+
+	* libraries/clib/net/PlainDatagramSocketImpl.c:
+	(bind, send) Compute the exact address length to pass to syscalls.
+	This is required for FreeBSD as reported by
+	Ito Kazumitsu <kaz@maczuka.gcd.org>.
+
+	* libraries/clib/net/PlainSocketImpl.c:
+	(bind, connect) Same commentary.
+
 2003-11-03  Dalibor Topic  <robilad@kaffe.org>
+
 	* kaffe/kaffeh/support.c:
 	(kaffeh_findClass) Changed type of buf to unsigned char* to
 	fix -pedantic warnings.
Index: kaffe/libraries/clib/net/PlainDatagramSocketImpl.c
diff -u kaffe/libraries/clib/net/PlainDatagramSocketImpl.c:1.34 kaffe/libraries/clib/net/PlainDatagramSocketImpl.c:1.35
--- kaffe/libraries/clib/net/PlainDatagramSocketImpl.c:1.34	Thu Oct 30 16:49:50 2003
+++ kaffe/libraries/clib/net/PlainDatagramSocketImpl.c	Tue Nov  4 20:42:41 2003
@@ -141,6 +141,7 @@
 
 	memset(&addr, 0, sizeof(addr));
 	if (obj_length(unhand(laddr)->addr) == 4) {
+		alen = sizeof(addr.addr4);
 #if defined(BSD44)
 		addr.addr4.sin_len = sizeof(addr.addr4);
 #endif
@@ -155,6 +156,7 @@
 )
 #if defined(HAVE_STRUCT_SOCKADDR_IN6)
 	} else if (obj_length(unhand(laddr)->addr) == 16) {
+		alen = sizeof(addr.addr6);
 #if defined(BSD44)
 		addr.addr6.sin6_len = sizeof(addr.addr6);
 #endif
@@ -172,7 +174,7 @@
 		SignalError("java.net.SocketException", "Unsupported address family");
 	}
 
-	r = KBIND(fd, (struct sockaddr*)&addr, sizeof(addr));
+	r = KBIND(fd, (struct sockaddr*)&addr, alen);
 	switch( r )
 	{
 	case 0:
@@ -209,6 +211,7 @@
 	int rc;
 	ssize_t bsent;
 	KaffeSocketAddr addr;
+	int alen;
 	
 DBG(NATIVENET,
 	dprintf("datagram_send(%p, %p [%d bytes])\n",
@@ -217,6 +220,7 @@
 
         memset(&addr, 0, sizeof(addr));
         if (obj_length(unhand(unhand(pkt)->address)->addr) == 4) {
+	    alen = sizeof(addr.addr4);
 #if defined(BSD44)
 	    addr.addr4.sin_len = sizeof(addr.addr4);
 #endif
@@ -232,6 +236,7 @@
 
 #if defined(HAVE_STRUCT_SOCKADDR_IN6)
 	} else if (obj_length(unhand(unhand(pkt)->address)->addr) == 16) {
+	    alen = sizeof(addr.addr6);
 #if defined(BSD44)
 	    addr.addr6.sin6_len = sizeof(addr.addr6);
 #endif
@@ -253,7 +258,7 @@
 
 	rc = KSENDTO(unhand(unhand(this)->fd)->nativeFd,
 		unhand_array(unhand(pkt)->buffer)->body, unhand(pkt)->length,
-		0, (struct sockaddr *)&addr, sizeof(addr), &bsent);
+		0, (struct sockaddr *)&addr, alen, &bsent);
 
 DBG(NATIVENET,
 	dprintf("  datagram_send() -> rc=%d bsent=%ld\n", rc, (long) bsent);
Index: kaffe/libraries/clib/net/PlainSocketImpl.c
diff -u kaffe/libraries/clib/net/PlainSocketImpl.c:1.35 kaffe/libraries/clib/net/PlainSocketImpl.c:1.36
--- kaffe/libraries/clib/net/PlainSocketImpl.c:1.35	Thu Oct 30 08:16:05 2003
+++ kaffe/libraries/clib/net/PlainSocketImpl.c	Tue Nov  4 20:42:41 2003
@@ -179,6 +179,7 @@
 
 	memset(&addr, 0, sizeof(addr));
 	if (obj_length(unhand(daddr)->addr) == 4) {
+	        alen = sizeof(addr.addr4); 
 #if defined(BSD44)
 		addr.addr4.sin_len = sizeof(addr.addr4);
 #endif
@@ -188,7 +189,7 @@
 		       unhand_byte_array(unhand(daddr)->addr), sizeof(addr.addr4.sin_addr));
 #if defined(HAVE_STRUCT_SOCKADDR_IN6)
 	} else if (obj_length(unhand(daddr)->addr) == 16) {
-
+	        alen = sizeof(addr.addr6);
 #if defined(BSD44)
 		addr.addr6.sin6_len = sizeof(addr.addr6);
 #endif
@@ -207,7 +208,7 @@
 	    )
 
 	fd = (int)unhand(unhand(this)->fd)->nativeFd;
-	r = KCONNECT(fd, (struct sockaddr*)&addr, sizeof(addr), timeout);
+	r = KCONNECT(fd, (struct sockaddr*)&addr, alen, timeout);
 	if (r == EINTR) {
 		SignalError("java.io.InterruptedIOException", 
 			    "Connect was interrupted");
@@ -264,6 +265,7 @@
 
 	memset(&addr, 0, sizeof(addr));
 	if (obj_length(unhand(laddr)->addr) == 4) {
+	        alen = sizeof(addr.addr4);
 #if defined(BSD44)
 		addr.addr4.sin_len = sizeof(addr.addr4);
 #endif
@@ -278,7 +280,7 @@
 		    );
 #if defined(HAVE_STRUCT_SOCKADDR_IN6)
 	} else if (obj_length(unhand(laddr)->addr) == 16) {
-
+	        alen = sizeof(addr.addr6);
 #if defined(BSD44)
 		addr.addr6.sin6_len = sizeof(addr.addr6);
 #endif
@@ -299,7 +301,7 @@
 
 	/* Allow rebinding to socket - ignore errors */
 	(void)KSETSOCKOPT(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on));
-	r = KBIND(fd, (struct sockaddr*)&addr, sizeof(addr));
+	r = KBIND(fd, (struct sockaddr*)&addr, alen);
 	switch( r )
 	{
 	case 0: