[kaffe] bug in PlainSocketImpl.c
Marc Kleine-Budde
kleine-budde@gmx.de
Wed May 7 03:49:01 2003
--C7zPtVaVf+AK4Oqc
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Hi!
I've found a small bug in the nativenet debug of
PlainSocketImpl.c:java_net_PlainSocketImpl_socketAccept
the port is not properly convertet to host order, see attached diff.
regards marc
--C7zPtVaVf+AK4Oqc
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="socket.diff"
Index: libraries/clib/net/PlainSocketImpl.c
===================================================================
RCS file: /gyro/cvs/kangaroo/libraries/clib/net/PlainSocketImpl.c,v
retrieving revision 1.1.1.1.2.1
diff -U20 -r1.1.1.1.2.1 PlainSocketImpl.c
--- libraries/clib/net/PlainSocketImpl.c 2003/03/04 15:07:55 1.1.1.1.2.1
+++ libraries/clib/net/PlainSocketImpl.c 2003/05/07 10:09:39
@@ -265,67 +265,67 @@
* Accept a connection.
*/
void
java_net_PlainSocketImpl_socketAccept(struct Hjava_net_PlainSocketImpl* this, struct Hjava_net_SocketImpl* sock)
{
int r;
int rc;
int alen;
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
#if defined(BSD44)
addr.sin_len = sizeof(addr);
#endif
addr.sin_family = AF_INET;
addr.sin_port = htons(unhand(sock)->localport);
addr.sin_addr.s_addr = htonl(unhand(unhand(sock)->address)->address);
DBG(NATIVENET,
dprintf("socketAccept(%p, localport=%d, addr=%s)\n",
- this, addr.sin_port, ip2str(ntohl(addr.sin_addr.s_addr)));
+ this, ntohs(addr.sin_port), ip2str(ntohl(addr.sin_addr.s_addr)));
)
alen = sizeof(addr);
rc = KACCEPT(unhand(unhand(this)->fd)->fd, (struct sockaddr*)&addr, &alen, unhand(this)->timeout, &r);
if (rc == EINTR) {
SignalError("java.io.InterruptedIOException",
"Accept timed out or was interrupted");
}
if (rc) {
SignalError("java.io.IOException", SYS_ERROR(rc));
}
unhand(unhand(sock)->fd)->fd = r;
/* Enter information into socket object */
alen = sizeof(addr);
r = KGETPEERNAME(r, (struct sockaddr*)&addr, &alen);
if (r) {
SignalError("java.io.IOException", SYS_ERROR(r));
}
unhand(unhand(sock)->address)->address = ntohl(addr.sin_addr.s_addr);
unhand(sock)->port = ntohs(addr.sin_port);
DBG(NATIVENET,
dprintf("socketAccept(%p, localport=-, addr=-) -> (sock: %p; addr: %s; port:%d)\n",
- this, sock, ip2str(ntohl(addr.sin_addr.s_addr)), addr.sin_port);
+ this, sock, ip2str(ntohl(addr.sin_addr.s_addr)), ntohs(addr.sin_port));
)
}
/*
* Return how many bytes can be read without blocking.
*/
jint
java_net_PlainSocketImpl_socketAvailable(struct Hjava_net_PlainSocketImpl* this)
{
int r;
jint len;
int fd;
#if (!(defined(HAVE_IOCTL) && defined(FIONREAD)) && !defined(__WIN32__))
static struct timeval tm = { 0, 0 };
fd_set rd;
#endif
DBG(NATIVENET,
dprintf("socketAvailable(%p)\n", this);
)
--C7zPtVaVf+AK4Oqc
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=ChangeLog
2003-05-07 Marc Kleine-Budde <kleine-budde@gmx.de>
* libraries/clib/net/PlainSocketImpl.c:
(java_net_PlainSocketImpl_socketAccept) DBG NATIVENET
convert port properly from network to host byte order
--C7zPtVaVf+AK4Oqc--