3909N/A * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 2362N/A * published by the Free Software Foundation. Oracle designates this 0N/A * particular file as subject to the "Classpath" exception as provided 2362N/A * by Oracle in the LICENSE file that accompanied this code. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 0N/A/************************************************************************ 0N/A * file descriptor used for dup2 0N/A * Create the marker file descriptor by establishing a loopback connection 0N/A * which we shutdown but do not close the fd. The result is an fd that 376N/A * Finally shutdown sv[0] (any reads to this fd will get 0N/A * EOF; any writes will get an error). 0N/A * Return the file descriptor given a PlainSocketImpl 0N/A * The initroto function is called whenever PlainSocketImpl is 0N/A * loaded, to cache fieldIds for efficiency. This is called everytime 0N/A * the Java class is loaded. 0N/A * Class: java_net_PlainSocketImpl 0N/A /* Create the marker fd used for dup2 */ 0N/A/* a global reference to the java.net.SocketException class. In 0N/A * socketCreate, we ensure that this is initialized. This is to 0N/A * prevent the problem where socketCreate runs out of file 0N/A * descriptors, and is then unable to load the exception class. 0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketCreate 0N/A * Signature: (Z)V */ 0N/A /* note: if you run out of fds, you may not be able to load 0N/A * the exception class, and get a NoClassDefFoundError 2653N/A /* Disable IPV6_V6ONLY to ensure dual-socket support */ 0N/A * If this is a server socket then enable SO_REUSEADDR 0N/A * automatically and set to non blocking. 0N/A * inetAddress is the address object passed to the socket connect 0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketConnect 0N/A /* fdObj is the FileDescriptor field on this */ 0N/A /* fd is an int field on iaObj */ 0N/A /* The result of the connection */ 0N/A#
endif /* AF_INET6 */ 0N/A /* This can happen if a blocking connect is interrupted by a signal. 0N/A /* has connection been established */ 0N/A * A timeout was specified. We put the socket into non-blocking 0N/A * mode, connect, and then wait for the connection to be 0N/A * established, fail, or timeout. 0N/A /* no need to use NET_Connect as non-blocking */ 0N/A /* connection not established immediately */ 0N/A * Wait for the connection to be established or a 0N/A * case lwp sig handler redirects any process signals to 0N/A * The poll was interrupted so adjust timeout and 0N/A "connect timed out");
0N/A * Timeout out but connection may still be established. 0N/A * At the high level it should be closed immediately but 0N/A * just in case we make the socket blocking again and 0N/A * shutdown input & output. 0N/A /* has connection been established */ 0N/A /* make socket blocking again */ 0N/A /* report the appropriate exception */ 0N/A * InetAddress.getLocalHost gets back the loopback address 0N/A * rather than the host address. Thus a socket can be 0N/A * bound to the loopback address and the connect will 0N/A * fail with EADDRNOTAVAIL. In addition the Linux kernel 0N/A * returns the wrong error in this case - it returns EINVAL 0N/A * instead of EADDRNOTAVAIL. We handle this here so that 0N/A * a more descriptive exception text is used. 0N/A "Invalid argument or cannot assign requested address");
0N/A "operation interrupted");
0N/A "Connection refused");
0N/A "Connection timed out");
0N/A "Host unreachable");
0N/A "Address not available");
0N/A /* set the remote peer address and port */ 0N/A * we need to initialize the local port field if bind was called 0N/A * previously to the connect (by the client) then localport field 0N/A * will already be initialized 0N/A /* Now that we're a connected socket, let's extract the port number 0N/A * that the system chose for us and store it in the Socket object. 0N/A "Error getting socket name");
0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketBind 0N/A /* fdObj is the FileDescriptor field on this */ 0N/A /* fd is an int field on fdObj */ 0N/A /* set the address */ 0N/A /* intialize the local port */ 0N/A /* Now that we're a connected socket, let's extract the port number 0N/A * that the system chose for us and store it in the Socket object. 0N/A "Error getting socket name");
0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketListen 0N/A /* this FileDescriptor fd field */ 0N/A /* fdObj's int fd field */ 0N/A * Workaround for bugid 4101691 in Solaris 2.6. See 4106600. 0N/A * If listen backlog is Integer.MAX_VALUE then subtract 1. 0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketAccept 0N/A /* fields on this */ 0N/A /* the FileDescriptor field on socket */ 0N/A /* the InetAddress field on socket */ 0N/A /* the ServerSocket fd int field on fdObj */ 0N/A * accept connection but ignore ECONNABORTED indicating that 0N/A * connection was eagerly accepted by the OS but was reset 0N/A * before accept() was called. 0N/A * If accept timeout in place and timeout is adjusted with 0N/A * each ECONNABORTED or EWOULDBLOCK to ensure that semantics 0N/A * of timeout are preserved. 0N/A /* first usage pick up current time */ 0N/A /* passing a timeout of 0 to poll will return immediately, 0N/A but in the case of ServerSocket 0 means infinite. */ 0N/A "Accept timed out");
0N/A "operation interrupted");
0N/A /* connection accepted */ 0N/A /* non (ECONNABORTED or EWOULDBLOCK) error */ 0N/A /* ECONNABORTED or EWOULDBLOCK error so adjust timeout if there is one. */ 0N/A "Accept timed out");
0N/A "operation interrupted");
0N/A * fill up the remote peer port and address in the new socket structure. 0N/A /* should be pending exception */ 0N/A * Populate SocketImpl.fd.fd 0N/A /* also fill up the local port information */ 0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketAvailable 0N/A /* JVM_SocketAvailable returns 0 for failure, 1 for success */ 0N/A "ioctl FIONREAD failed");
0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketClose0 0N/A "socket already closed");
0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketShutdown 0N/A * WARNING: THIS NEEDS LOCKING. ALSO: SHOULD WE CHECK for fd being 0N/A "socket already closed");
0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketSetOption 0N/A * Check that socket hasn't been closed 0N/A * Map the Java level socket option to the platform specific 0N/A * level and option name. 0N/A /* Boolean -> int */ 0N/A // On Solaris setsockopt will set errno to EINVAL if the socket 0N/A // is closed. The default error message is then confusing 0N/A#
endif /* __solaris__ */ 0N/A "Error setting socket option");
0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketGetOption 0N/A * Check that socket hasn't been closed 0N/A * SO_BINDADDR isn't a socket option 0N/A "Error getting socket name");
0N/A return 0;
/* notice change from before */ 0N/A * Map the Java level socket option to the platform specific 0N/A * level and option name. 0N/A * Args are int except for SO_LINGER 0N/A "Error getting socket option");
0N/A * Class: java_net_PlainSocketImpl 0N/A * Method: socketSendUrgentData 0N/A /* Bug 4086704 - If the Socket associated with this file descriptor 0N/A * was closed (sysCloseFD), the the file descriptor is set to -1.