/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* This class PlainSocketImpl simply delegates to the appropriate real
* SocketImpl. We do this because PlainSocketImpl is already extended
* by SocksSocketImpl.
* <p>
* There are two possibilities for the real SocketImpl,
* TwoStacksPlainSocketImpl or DualStackPlainSocketImpl. We use
* DualStackPlainSocketImpl on systems that have a dual stack
* TCP implementation. Otherwise we create an instance of
* TwoStacksPlainSocketImpl and delegate to it.
*
* @author Chris Hegarty
*/
{
/* the windows version. */
private static float version;
/* java.net.preferIPv4Stack */
private static boolean preferIPv4Stack = false;
/* If the version supports a dual stack TCP implementation */
private static boolean useDualStackImpl = false;
/* sun.net.useExclusiveBind */
/* True if exclusive binding is on for Windows */
private static boolean exclusiveBind = true;
static {
version = 0;
try {
} catch (NumberFormatException e ) {
assert false : e;
}
return null; // nothing to return
} });
// (version >= 6.0) implies Vista or greater.
useDualStackImpl = true;
}
if (exclBindProp != null) {
// sun.net.useExclusiveBind is true
} else if (version < 6.0) {
exclusiveBind = false;
}
}
/**
* Constructs an empty instance.
*/
PlainSocketImpl() {
if (useDualStackImpl) {
} else {
}
}
/**
* Constructs an instance with the given file descriptor.
*/
if (useDualStackImpl) {
} else {
}
}
// Override methods in SocketImpl that access impl's fields.
return impl.getFileDescriptor();
}
return impl.getInetAddress();
}
protected int getPort() {
}
protected int getLocalPort() {
return impl.getLocalPort();
}
}
}
}
return impl.getServerSocket();
}
}
// Override methods in AbstractPlainSocketImpl that access impl's fields.
// set fd to delegate's fd to be compatible with older releases
}
throws UnknownHostException, IOException
{
}
}
}
}
}
}
throws IOException
{
}
// pass in the real impl not the wrapper.
// set fd to delegate's fd to be compatible with older releases
}
}
}
}
}
return impl.getInputStream();
}
}
return impl.getOutputStream();
}
try {
} finally {
// set fd to delegate's fd to be compatible with older releases
}
}
try {
} finally {
// set fd to delegate's fd to be compatible with older releases
}
}
}
}
}
}
void releaseFD() {
}
public boolean isConnectionReset() {
return impl.isConnectionReset();
}
public boolean isConnectionResetPending() {
return impl.isConnectionResetPending();
}
public void setConnectionReset() {
}
public void setConnectionResetPending() {
}
public boolean isClosedOrPending() {
return impl.isClosedOrPending();
}
public int getTimeout() {
return impl.getTimeout();
}
// Override methods in AbstractPlainSocketImpl that need to be implemented.
}
throws IOException {
}
throws IOException {
}
}
impl.socketAccept(s);
}
return impl.socketAvailable();
}
}
}
throws SocketException {
}
}
}
}