diff options
author | Michael Koch <konqueror@gmx.de> | 2002-11-29 07:56:58 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2002-11-29 07:56:58 +0000 |
commit | 38a21d46b069364ec843a60a6b9fe1c527825944 (patch) | |
tree | eef474c51f1d8941961771ec5290dbedfa69e847 /libjava/gnu/java/nio/natServerSocketChannelImpl.cc | |
parent | ac7edc01e80616a8befedf7610d13ce28fb4fe24 (diff) | |
download | gcc-38a21d46b069364ec843a60a6b9fe1c527825944.zip gcc-38a21d46b069364ec843a60a6b9fe1c527825944.tar.gz gcc-38a21d46b069364ec843a60a6b9fe1c527825944.tar.bz2 |
natByteBufferImpl.cc, [...]: New files that implement native functionalities.
2002-11-29 Michael Koch <konqueror@gmx.de>
* gnu/java/nio/natByteBufferImpl.cc,
gnu/java/nio/natCharBufferImpl.cc,
gnu/java/nio/natDoubleBufferImpl.cc,
gnu/java/nio/natFloatBufferImpl.cc,
gnu/java/nio/natIntBufferImpl.cc,
gnu/java/nio/natLongBufferImpl.cc,
gnu/java/nio/natSelectorImpl.cc,
gnu/java/nio/natServerSocketChannelImpl.cc,
gnu/java/nio/natShortBufferImpl.cc,
gnu/java/nio/natSocketChannelImpl.cc:
New files that implement native functionalities.
From-SVN: r59625
Diffstat (limited to 'libjava/gnu/java/nio/natServerSocketChannelImpl.cc')
-rw-r--r-- | libjava/gnu/java/nio/natServerSocketChannelImpl.cc | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/libjava/gnu/java/nio/natServerSocketChannelImpl.cc b/libjava/gnu/java/nio/natServerSocketChannelImpl.cc new file mode 100644 index 0000000..1f7d7fc --- /dev/null +++ b/libjava/gnu/java/nio/natServerSocketChannelImpl.cc @@ -0,0 +1,77 @@ +// natSelectorImpl.cc + +/* Copyright (C) 2002 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include <config.h> +#include <platform.h> + +#include <errno.h> +#include <netinet/in.h> + +#include <gcj/cni.h> +#include <gnu/java/nio/ServerSocketChannelImpl.h> +#include <gnu/java/nio/SocketChannelImpl.h> +#include <java/io/IOException.h> +#include <java/net/InetSocketAddress.h> +#include <java/net/SocketException.h> + +union SockAddr +{ + struct sockaddr_in address; +#ifdef HAVE_INET6 + struct sockaddr_in6 address6; +#endif +}; + +jint +gnu::java::nio::ServerSocketChannelImpl::SocketAccept ( + ServerSocketChannelImpl* socket, + SocketChannelImpl* s) +{ + union SockAddr u; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + socklen_t addrlen = sizeof(struct sockaddr); +/* + jbyteArray haddress = socket->sa->getAddress ()->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + + if (len == 4) + { + u.address.sin_family = AF_INET; + memcpy (&u.address.sin_addr, bytes, len); + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons ( socket->sa->getPort ()); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (socket->sa->getPort ()); + } +#endif + else + throw new ::java::net::SocketException (JvNewStringUTF ("invalid length")); +*/ + + int sock = _Jv_accept (socket->fd, ptr, &addrlen); + + // FIXME: write address/port in ptr into java variables + + if (sock < 0) + { + char* strerr = strerror (errno); + throw new ::java::io::IOException (JvNewStringUTF (strerr)); + } + + s->fd = sock; + return sock; +} |