From: Michael Koch Date: Thu, 21 Nov 2002 10:24:18 +0000 (+0000) Subject: Forgot to add to cvs command line X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4033adc630effd3aebc705f3a93b8dd8a117fd0b;p=gcc.git Forgot to add to cvs command line From-SVN: r59340 --- diff --git a/libjava/java/net/natPlainDatagramSocketImpl.cc b/libjava/java/net/natPlainDatagramSocketImpl.cc index 60b25d22bfa..cbc029a18da 100644 --- a/libjava/java/net/natPlainDatagramSocketImpl.cc +++ b/libjava/java/net/natPlainDatagramSocketImpl.cc @@ -7,23 +7,15 @@ Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ #include - #include #ifdef WIN32 + #include #include -#ifndef ENOPROTOOPT -#define ENOPROTOOPT 109 -#endif - -#define NATIVE_CLOSE(s) closesocket (s) #else /* WIN32 */ -#ifdef HAVE_SYS_SOCKET_H -#include -#endif #ifdef HAVE_NETINET_IN_H #include #endif @@ -33,8 +25,6 @@ details. */ #include #include -#define NATIVE_CLOSE(s) ::close (s) - #endif /* WIN32 */ #if HAVE_BSTRING_H @@ -42,20 +32,6 @@ details. */ #include #endif -#ifndef DISABLE_JAVA_NET -// Avoid macro definitions of bind from system headers, e.g. on -// Solaris 7 with _XOPEN_SOURCE. FIXME -static inline int -_Jv_bind (int fd, struct sockaddr *addr, int addrlen) -{ - return ::bind (fd, addr, addrlen); -} -#endif /* DISABLE_JAVA_NET */ - -#ifdef bind -#undef bind -#endif - #include #include #include @@ -212,7 +188,8 @@ union InAddr void java::net::PlainDatagramSocketImpl::create () { - int sock = ::socket (AF_INET, SOCK_DGRAM, 0); + int sock = _Jv_socket (AF_INET, SOCK_DGRAM, 0); + if (sock < 0) { char* strerr = strerror (errno); @@ -240,10 +217,12 @@ java::net::PlainDatagramSocketImpl::bind (jint lport, if (len == 4) { u.address.sin_family = AF_INET; + if (host != NULL) - memcpy (&u.address.sin_addr, bytes, len); + memcpy (&u.address.sin_addr, bytes, len); else - u.address.sin_addr.s_addr = htonl (INADDR_ANY); + u.address.sin_addr.s_addr = htonl (INADDR_ANY); + len = sizeof (struct sockaddr_in); u.address.sin_port = htons (lport); } @@ -262,19 +241,23 @@ java::net::PlainDatagramSocketImpl::bind (jint lport, if (_Jv_bind (fnum, ptr, len) == 0) { socklen_t addrlen = sizeof(u); + if (lport != 0) localPort = lport; else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) localPort = ntohs (u.address.sin_port); else goto error; + /* Allow broadcast by default. */ int broadcast = 1; if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &broadcast, sizeof (broadcast)) != 0) goto error; + return; } + error: char* strerr = strerror (errno); throw new java::net::BindException (JvNewStringUTF (strerr)); @@ -329,8 +312,10 @@ java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i) return rport; error: char* strerr = strerror (errno); + if (errno == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); + throw new java::io::IOException (JvNewStringUTF (strerr)); } @@ -356,9 +341,9 @@ java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *p) tv.tv_usec = (timeout % 1000) * 1000; int retval; if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) - goto error; + goto error; else if (retval == 0) - throw new java::io::InterruptedIOException (); + throw new java::io::InterruptedIOException (); } #endif /* WIN32 */ @@ -391,10 +376,13 @@ java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *p) p->setPort (rport); p->setLength ((jint) retlen); return rport; + error: char* strerr = strerror (errno); + if (errno == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); + throw new java::io::IOException (JvNewStringUTF (strerr)); } @@ -407,7 +395,7 @@ java::net::PlainDatagramSocketImpl::close () // The method isn't declared to throw anything, so we disregard // the return value. - NATIVE_CLOSE (fnum); + _Jv_close (fnum); fnum = -1; timeout = 0; } @@ -446,8 +434,10 @@ java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p) return; char* strerr = strerror (errno); + if (errno == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); + throw new java::io::IOException (JvNewStringUTF (strerr)); } @@ -473,9 +463,9 @@ java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p) tv.tv_usec = (timeout % 1000) * 1000; int retval; if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) - goto error; + goto error; else if (retval == 0) - throw new java::io::InterruptedIOException (); + throw new java::io::InterruptedIOException (); } #endif /* WIN32 */ @@ -508,10 +498,13 @@ java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p) p->setPort (rport); p->setLength ((jint) retlen); return; + error: char* strerr = strerror (errno); + if (errno == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); + throw new java::io::IOException (JvNewStringUTF (strerr)); } @@ -521,6 +514,7 @@ java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl) // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. char val = (char) ttl; socklen_t val_len = sizeof(val); + if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0) return; @@ -534,6 +528,7 @@ java::net::PlainDatagramSocketImpl::getTimeToLive () // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. char val; socklen_t val_len = sizeof(val); + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0) return ((int) val) & 0xFF; diff --git a/libjava/java/net/natPlainSocketImpl.cc b/libjava/java/net/natPlainSocketImpl.cc index 275e8f9a4c8..9cd0f3b9dff 100644 --- a/libjava/java/net/natPlainSocketImpl.cc +++ b/libjava/java/net/natPlainSocketImpl.cc @@ -10,7 +10,9 @@ details. */ #include #ifndef DISABLE_JAVA_NET + #ifdef WIN32 + #include #include #include @@ -20,8 +22,6 @@ details. */ #undef MIN_PRIORITY #undef FIONREAD -#define NATIVE_CLOSE(s) closesocket (s) - // These functions make the Win32 socket API look more POSIXy static inline int write(int s, void *buf, int len) @@ -36,11 +36,6 @@ read(int s, void *buf, int len) } // these errors cannot occur on Win32 -#define ENOTCONN 0 -#define ECONNRESET 0 -#ifndef ENOPROTOOPT -#define ENOPROTOOPT 109 -#endif #else /* WIN32 */ #ifdef HAVE_SYS_IOCTL_H @@ -53,14 +48,11 @@ read(int s, void *buf, int len) #include #endif -#include #include #include #include #include -#define NATIVE_CLOSE(s) ::close (s) - #endif /* WIN32 */ #endif /* DISABLE_JAVA_NET */ @@ -73,43 +65,6 @@ read(int s, void *buf, int len) typedef int socklen_t; #endif -#ifndef DISABLE_JAVA_NET - -// Avoid macro definitions of bind, connect from system headers, e.g. on -// Solaris 7 with _XOPEN_SOURCE. FIXME -static inline int -_Jv_bind (int fd, struct sockaddr *addr, int addrlen) -{ - return ::bind (fd, addr, addrlen); -} - -#ifdef bind -#undef bind -#endif - -static inline int -_Jv_connect (int fd, struct sockaddr *addr, int addrlen) -{ - return ::connect (fd, addr, addrlen); -} - -#ifdef connect -#undef connect -#endif - -// Same problem with accept on Tru64 UNIX with _POSIX_PII_SOCKET -static inline int -_Jv_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) -{ - return ::accept (fd, addr, addrlen); -} - -#ifdef accept -#undef accept -#endif - -#endif /* DISABLE_JAVA_NET */ - #include #include #include @@ -258,7 +213,7 @@ union SockAddr void java::net::PlainSocketImpl::create (jboolean stream) { - int sock = ::socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); + int sock = _Jv_socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); if (sock < 0) { @@ -495,7 +450,7 @@ java::net::PlainSocketImpl::close() JvSynchronize sync (this); // should we use shutdown here? how would that effect so_linger? - int res = NATIVE_CLOSE (fnum); + int res = _Jv_close (fnum); if (res == -1) { @@ -518,7 +473,7 @@ java::net::PlainSocketImpl::write(jint b) while (r != 1) { - r = ::write (fnum, &d, 1); + r = _Jv_write (fnum, &d, 1); if (r == -1) { if (java::lang::Thread::interrupted()) @@ -551,7 +506,7 @@ java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) while (len > 0) { - int r = ::write (fnum, bytes, len); + int r = _Jv_write (fnum, bytes, len); if (r == -1) { @@ -614,7 +569,7 @@ java::net::PlainSocketImpl::read(void) } #endif /* WIN32 */ - int r = ::read (fnum, &b, 1); + int r = _Jv_read (fnum, &b, 1); if (r == 0) return -1;