From c3e0633cc3510ceb36a0105ef6c4fb8ad230ff36 Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Thu, 21 Nov 2002 10:08:03 +0000 Subject: [PATCH] 2002-11-21 Michael Koch * include/posix.h (_Jv_socket): New method. (_Jv_connect): New method. (_Jv_close): New method. (_Jv_platform_close_on_exec): Prefixed system function with "::". (_Jv_bind): New method. (_Jv_listen): New method. (_Jv_write): New method. (_Jv_read): New method. * include/win32.h (_Jv_socket): New method. (_Jv_connect): New method. (_Jv_close): New method. (_Jv_bind): New method. (_Jv_listen): New method. (_Jv_write): New method. (_Jv_read): New method. * java/net/natNetworkInterface.cc: Include platform.h, removed inclusion of socket.h (getRealNetworkInterfaces): Replaced ::socket() by _Jv_socket() and ::close() by _Jv_close(). * java/net/natPlainDatagramSocketImpl.cc: Removed include of socket.h, definition of NATIVE_CLOSE and _Jv_bind, added some new lines to make code more readable. (create): Replaced ::socket() by _Jv_socket(). (close): Replaced NATIVE_CLOSE() by _Jv_close(). * java/net/natPlainSocketImpl.cc: Removed definition of NATIVE_CLOSE, _Jv_bind, Jv_connect and _Jv_accept, removed include of socket.h, removed some windows defines (now in include/win32.h). (create): Replaced ::socket() by _Jv_socket(). (close): Replaced NATIVE_CLOSE() by _Jv_close(). (write): Replaced ::read by _Jv_write(). (read): Replaced ::read by _Jv_read(). From-SVN: r59338 --- libjava/ChangeLog | 37 ++++++++++++++++ libjava/include/posix.h | 56 ++++++++++++++++++++++++- libjava/include/win32.h | 55 ++++++++++++++++++++++++ libjava/java/net/natNetworkInterface.cc | 13 +++--- 4 files changed, 153 insertions(+), 8 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index f4bf4e57563..4fcd4d0ed19 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,40 @@ +2002-11-21 Michael Koch + + * include/posix.h + (_Jv_socket): New method. + (_Jv_connect): New method. + (_Jv_close): New method. + (_Jv_platform_close_on_exec): Prefixed system function with "::". + (_Jv_bind): New method. + (_Jv_listen): New method. + (_Jv_write): New method. + (_Jv_read): New method. + * include/win32.h + (_Jv_socket): New method. + (_Jv_connect): New method. + (_Jv_close): New method. + (_Jv_bind): New method. + (_Jv_listen): New method. + (_Jv_write): New method. + (_Jv_read): New method. + * java/net/natNetworkInterface.cc: + Include platform.h, removed inclusion of socket.h + (getRealNetworkInterfaces): Replaced ::socket() by _Jv_socket() and + ::close() by _Jv_close(). + * java/net/natPlainDatagramSocketImpl.cc: + Removed include of socket.h, definition of NATIVE_CLOSE and _Jv_bind, + added some new lines to make code more readable. + (create): Replaced ::socket() by _Jv_socket(). + (close): Replaced NATIVE_CLOSE() by _Jv_close(). + * java/net/natPlainSocketImpl.cc: + Removed definition of NATIVE_CLOSE, _Jv_bind, Jv_connect and _Jv_accept, + removed include of socket.h, removed some windows defines + (now in include/win32.h). + (create): Replaced ::socket() by _Jv_socket(). + (close): Replaced NATIVE_CLOSE() by _Jv_close(). + (write): Replaced ::read by _Jv_write(). + (read): Replaced ::read by _Jv_read(). + 2002-11-20 Michael Koch * Makefile.am (ordinary_java_source_files): diff --git a/libjava/include/posix.h b/libjava/include/posix.h index 8fa782fc662..975b93c56f4 100644 --- a/libjava/include/posix.h +++ b/libjava/include/posix.h @@ -27,6 +27,10 @@ details. */ #include #endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + #ifdef HAVE_UNISTD_H #include #endif @@ -41,11 +45,61 @@ extern jlong _Jv_platform_gettimeofday (); extern void _Jv_platform_initialize (void); extern void _Jv_platform_initProperties (java::util::Properties*); +static inline int +_Jv_socket (int domain, int type, int protocol) +{ + return ::socket (domain, type, protocol); +} + +inline int +_Jv_connect (jint fd, sockaddr *ptr, int len) +{ + return ::connect (fd, ptr, len); +} + +inline int +_Jv_close (jint fd) +{ + return ::close (fd); +} + inline void _Jv_platform_close_on_exec (jint fd) { // Ignore errors. - fcntl (fd, F_SETFD, FD_CLOEXEC); + ::fcntl (fd, F_SETFD, FD_CLOEXEC); } +// Avoid macro definitions of bind from system headers, e.g. on +// Solaris 7 with _XOPEN_SOURCE. FIXME +inline int +_Jv_bind (int fd, struct sockaddr *addr, int addrlen) +{ + return ::bind (fd, addr, addrlen); +} + +// Same problem with accept on Tru64 UNIX with _POSIX_PII_SOCKET +inline int +_Jv_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) +{ + return ::accept (fd, addr, addrlen); +} + +inline int +_Jv_listen (int fd, int backlog) +{ + return ::listen (fd, backlog); +} + +inline int +_Jv_write(int s, void *buf, int len) +{ + return ::write (s, buf, len); +} + +inline int +_Jv_read(int s, void *buf, int len) +{ + return ::read (s, buf, len); +} #endif diff --git a/libjava/include/win32.h b/libjava/include/win32.h index a035cfc5c13..3965cb2575f 100644 --- a/libjava/include/win32.h +++ b/libjava/include/win32.h @@ -22,16 +22,71 @@ details. */ #include +// these errors cannot occur on Win32 +#define ENOTCONN 0 +#define ECONNRESET 0 + +#ifndef ENOPROTOOPT +#define ENOPROTOOPT 109 +#endif + extern void _Jv_platform_initialize (void); extern void _Jv_platform_initProperties (java::util::Properties*); extern jlong _Jv_platform_gettimeofday (); +static inline int +_Jv_socket (int domain, int type, int protocol) +{ + return ::socket (domain, type, protocol); +} + +inline int +_Jv_connect (jint fd, sockaddr *ptr, int len) +{ + return ::connect (fd, ptr, len); +} + +inline int +_Jv_close (jint fd) +{ + return ::closesocket (fd); +} + inline void _Jv_platform_close_on_exec (jint) { // Ignore. } +inline int +_Jv_bind (int fd, struct sockaddr *addr, int addrlen) +{ + return ::bind (fd, addr, addrlen); +} + +inline int +_Jv_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) +{ + return ::accept (fd, addr, addrlen); +} + +inline int +_Jv_listen (int fd, int backlog) +{ + return ::listen (fd, backlog); +} + +inline int +_Jv_write(int s, void *buf, int len) +{ + return ::send (s, (char*) buf, len, 0); +} + +inline int +_Jv_read(int s, void *buf, int len) +{ + return ::recv (s, (char*) buf, len, 0); +} #define HAVE_BACKTRACE /* Store up to SIZE return address of the current program state in diff --git a/libjava/java/net/natNetworkInterface.cc b/libjava/java/net/natNetworkInterface.cc index f2019409e81..65bcf16a2c5 100644 --- a/libjava/java/net/natNetworkInterface.cc +++ b/libjava/java/net/natNetworkInterface.cc @@ -9,6 +9,7 @@ Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ #include +#include #ifdef WIN32 @@ -27,9 +28,6 @@ details. */ #include #include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif #ifdef HAVE_NETINET_IN_H #include #endif @@ -83,7 +81,7 @@ java::net::NetworkInterface::getRealNetworkInterfaces () if_data.ifc_buf = NULL; // Open a (random) socket to have a file descriptor for the ioctl calls. - fd = ::socket (PF_INET, SOCK_DGRAM, htons (IPPROTO_IP)); + fd = _Jv_socket (PF_INET, SOCK_DGRAM, htons (IPPROTO_IP)); if (fd < 0) throw new ::java::net::SocketException; @@ -96,7 +94,7 @@ java::net::NetworkInterface::getRealNetworkInterfaces () if_data.ifc_len = sizeof (struct ifreq) * num_interfaces; if_data.ifc_buf = - (char*) _Jv_Realloc (if_data.ifc_buf, if_data.ifc_len); + (char*) _Jv_Realloc (if_data.ifc_buf, if_data.ifc_len); // Try to get all local interfaces. if (::ioctl (fd, SIOCGIFCONF, &if_data) < 0) @@ -106,6 +104,7 @@ java::net::NetworkInterface::getRealNetworkInterfaces () // Get addresses of all interfaces. if_record = if_data.ifc_req; + for (int n = 0; n < if_data.ifc_len; n += sizeof (struct ifreq)) { struct ifreq ifr; @@ -115,7 +114,7 @@ java::net::NetworkInterface::getRealNetworkInterfaces () // Try to get the IPv4-address of the local interface if (::ioctl (fd, SIOCGIFADDR, &ifr) < 0) - throw new java::net::SocketException; + throw new java::net::SocketException; int len = 4; struct sockaddr_in sa = *((sockaddr_in*) &(ifr.ifr_addr)); @@ -136,7 +135,7 @@ java::net::NetworkInterface::getRealNetworkInterfaces () _Jv_Free (if_data.ifc_buf); if (fd >= 0) - ::close (fd); + _Jv_close (fd); return ht; #endif /* WIN32 */ -- 2.30.2