同步操作将从 cxylk/Java-Notes 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/** Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*********************/package java.net;import java.io.IOException;import java.io.FileDescriptor;import sun.net.ResourceManager;/** This class defines the plain SocketImpl that is used for all* Windows version lower than Vista. It adds support for IPv6 on* these platforms where available.** For backward compatibility Windows platforms that do not have IPv6* support also use this implementation, and fd1 gets set to null* during socket creation.** @author Chris Hegarty*/class TwoStacksPlainSocketImpl extends AbstractPlainSocketImpl{/* second fd, used for ipv6 on windows only.* fd1 is used for listeners and for client sockets at initialization* until the socket is connected. Up to this point fd always refers* to the ipv4 socket and fd1 to the ipv6 socket. After the socket* becomes connected, fd always refers to the connected socket* (either v4 or v6) and fd1 is closed.** For ServerSockets, fd always refers to the v4 listener and* fd1 the v6 listener.*/private FileDescriptor fd1;/** Needed for ipv6 on windows because we need to know* if the socket is bound to ::0 or 0.0.0.0, when a caller* asks for it. Otherwise we don't know which socket to ask.*/private InetAddress anyLocalBoundAddr = null;/* to prevent starvation when listening on two sockets, this is* is used to hold the id of the last socket we accepted on.*/private int lastfd = -1;// true if this socket is exclusively boundprivate final boolean exclusiveBind;// emulates SO_REUSEADDR when exclusiveBind is trueprivate boolean isReuseAddress;static {initProto();}public TwoStacksPlainSocketImpl(boolean exclBind) {exclusiveBind = exclBind;}public TwoStacksPlainSocketImpl(FileDescriptor fd, boolean exclBind) {this.fd = fd;exclusiveBind = exclBind;}/*** Creates a socket with a boolean that specifies whether this* is a stream socket (true) or an unconnected UDP socket (false).*/protected synchronized void create(boolean stream) throws IOException {fd1 = new FileDescriptor();try {super.create(stream);} catch (IOException e) {fd1 = null;throw e;}}/*** Binds the socket to the specified address of the specified local port.* @param address the address* @param port the port*/protected synchronized void bind(InetAddress address, int lport)throws IOException{super.bind(address, lport);if (address.isAnyLocalAddress()) {anyLocalBoundAddr = address;}}public Object getOption(int opt) throws SocketException {if (isClosedOrPending()) {throw new SocketException("Socket Closed");}if (opt == SO_BINDADDR) {if (fd != null && fd1 != null ) {/* must be unbound or else bound to anyLocal */return anyLocalBoundAddr;}InetAddressContainer in = new InetAddressContainer();socketGetOption(opt, in);return in.addr;} else if (opt == SO_REUSEADDR && exclusiveBind) {// SO_REUSEADDR emulated when using exclusive bindreturn isReuseAddress;} elsereturn super.getOption(opt);}@Overridevoid socketBind(InetAddress address, int port) throws IOException {socketBind(address, port, exclusiveBind);}@Overridevoid socketSetOption(int opt, boolean on, Object value)throws SocketException{// SO_REUSEADDR emulated when using exclusive bindif (opt == SO_REUSEADDR && exclusiveBind)isReuseAddress = on;elsesocketNativeSetOption(opt, on, value);}/*** Closes the socket.*/@Overrideprotected void close() throws IOException {synchronized(fdLock) {if (fd != null || fd1 != null) {if (!stream) {ResourceManager.afterUdpClose();}if (fdUseCount == 0) {if (closePending) {return;}closePending = true;socketClose();fd = null;fd1 = null;return;} else {/** If a thread has acquired the fd and a close* isn't pending then use a deferred close.* Also decrement fdUseCount to signal the last* thread that releases the fd to close it.*/if (!closePending) {closePending = true;fdUseCount--;socketClose();}}}}}@Overridevoid reset() throws IOException {if (fd != null || fd1 != null) {socketClose();}fd = null;fd1 = null;super.reset();}/** Return true if already closed or close is pending*/@Overridepublic boolean isClosedOrPending() {/** Lock on fdLock to ensure that we wait if a* close is in progress.*/synchronized (fdLock) {if (closePending || (fd == null && fd1 == null)) {return true;} else {return false;}}}/* Native methods */static native void initProto();native void socketCreate(boolean isServer) throws IOException;native void socketConnect(InetAddress address, int port, int timeout)throws IOException;native void socketBind(InetAddress address, int port, boolean exclBind)throws IOException;native void socketListen(int count) throws IOException;native void socketAccept(SocketImpl s) throws IOException;native int socketAvailable() throws IOException;native void socketClose0(boolean useDeferredClose) throws IOException;native void socketShutdown(int howto) throws IOException;native void socketNativeSetOption(int cmd, boolean on, Object value)throws SocketException;native int socketGetOption(int opt, Object iaContainerObj) throws SocketException;native void socketSendUrgentData(int data) throws IOException;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。