class java.net.TwoStacksPlainSocketImpl extends java.net.AbstractPlainSocketImpl
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: java.net.TwoStacksPlainSocketImpl
  super_class: java.net.AbstractPlainSocketImpl
{
  private java.io.FileDescriptor fd1;
    descriptor: Ljava/io/FileDescriptor;
    flags: (0x0002) ACC_PRIVATE

  private java.net.InetAddress anyLocalBoundAddr;
    descriptor: Ljava/net/InetAddress;
    flags: (0x0002) ACC_PRIVATE

  private int lastfd;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private final boolean exclusiveBind;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private boolean isReuseAddress;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=0, locals=0, args_size=0
         0: .line 76
            invokestatic java.net.TwoStacksPlainSocketImpl.initProto:()V
         1: .line 77
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.net.TwoStacksPlainSocketImpl this
        start local 1 // boolean exclBind
         0: .line 79
            aload 0 /* this */
            invokespecial java.net.AbstractPlainSocketImpl.<init>:()V
         1: .line 62
            aload 0 /* this */
            aconst_null
            putfield java.net.TwoStacksPlainSocketImpl.anyLocalBoundAddr:Ljava/net/InetAddress;
         2: .line 67
            aload 0 /* this */
            iconst_m1
            putfield java.net.TwoStacksPlainSocketImpl.lastfd:I
         3: .line 80
            aload 0 /* this */
            iload 1 /* exclBind */
            putfield java.net.TwoStacksPlainSocketImpl.exclusiveBind:Z
         4: .line 81
            return
        end local 1 // boolean exclBind
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Ljava/net/TwoStacksPlainSocketImpl;
            0    5     1  exclBind  Z
    MethodParameters:
          Name  Flags
      exclBind  

  public void <init>(java.io.FileDescriptor, boolean);
    descriptor: (Ljava/io/FileDescriptor;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // java.net.TwoStacksPlainSocketImpl this
        start local 1 // java.io.FileDescriptor fd
        start local 2 // boolean exclBind
         0: .line 83
            aload 0 /* this */
            invokespecial java.net.AbstractPlainSocketImpl.<init>:()V
         1: .line 62
            aload 0 /* this */
            aconst_null
            putfield java.net.TwoStacksPlainSocketImpl.anyLocalBoundAddr:Ljava/net/InetAddress;
         2: .line 67
            aload 0 /* this */
            iconst_m1
            putfield java.net.TwoStacksPlainSocketImpl.lastfd:I
         3: .line 84
            aload 0 /* this */
            aload 1 /* fd */
            putfield java.net.TwoStacksPlainSocketImpl.fd:Ljava/io/FileDescriptor;
         4: .line 85
            aload 0 /* this */
            iload 2 /* exclBind */
            putfield java.net.TwoStacksPlainSocketImpl.exclusiveBind:Z
         5: .line 86
            return
        end local 2 // boolean exclBind
        end local 1 // java.io.FileDescriptor fd
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Ljava/net/TwoStacksPlainSocketImpl;
            0    6     1        fd  Ljava/io/FileDescriptor;
            0    6     2  exclBind  Z
    MethodParameters:
          Name  Flags
      fd        
      exclBind  

  protected synchronized void create(boolean);
    descriptor: (Z)V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // java.net.TwoStacksPlainSocketImpl this
        start local 1 // boolean stream
         0: .line 93
            aload 0 /* this */
            new java.io.FileDescriptor
            dup
            invokespecial java.io.FileDescriptor.<init>:()V
            putfield java.net.TwoStacksPlainSocketImpl.fd1:Ljava/io/FileDescriptor;
         1: .line 95
            aload 0 /* this */
            iload 1 /* stream */
            invokespecial java.net.AbstractPlainSocketImpl.create:(Z)V
         2: .line 96
            goto 6
      StackMap locals:
      StackMap stack: java.io.IOException
         3: astore 2 /* e */
        start local 2 // java.io.IOException e
         4: .line 97
            aload 0 /* this */
            aconst_null
            putfield java.net.TwoStacksPlainSocketImpl.fd1:Ljava/io/FileDescriptor;
         5: .line 98
            aload 2 /* e */
            athrow
        end local 2 // java.io.IOException e
         6: .line 100
      StackMap locals:
      StackMap stack:
            return
        end local 1 // boolean stream
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    7     0    this  Ljava/net/TwoStacksPlainSocketImpl;
            0    7     1  stream  Z
            4    6     2       e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1     2       3  Class java.io.IOException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
        Name  Flags
      stream  

  protected synchronized void bind(java.net.InetAddress, int);
    descriptor: (Ljava/net/InetAddress;I)V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // java.net.TwoStacksPlainSocketImpl this
        start local 1 // java.net.InetAddress address
        start local 2 // int lport
         0: .line 110
            aload 0 /* this */
            aload 1 /* address */
            iload 2 /* lport */
            invokespecial java.net.AbstractPlainSocketImpl.bind:(Ljava/net/InetAddress;I)V
         1: .line 111
            aload 1 /* address */
            invokevirtual java.net.InetAddress.isAnyLocalAddress:()Z
            ifeq 3
         2: .line 112
            aload 0 /* this */
            aload 1 /* address */
            putfield java.net.TwoStacksPlainSocketImpl.anyLocalBoundAddr:Ljava/net/InetAddress;
         3: .line 114
      StackMap locals:
      StackMap stack:
            return
        end local 2 // int lport
        end local 1 // java.net.InetAddress address
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Ljava/net/TwoStacksPlainSocketImpl;
            0    4     1  address  Ljava/net/InetAddress;
            0    4     2    lport  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      address  
      lport    

  public java.lang.Object getOption(int);
    descriptor: (I)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // java.net.TwoStacksPlainSocketImpl this
        start local 1 // int opt
         0: .line 117
            aload 0 /* this */
            invokevirtual java.net.TwoStacksPlainSocketImpl.isClosedOrPending:()Z
            ifeq 2
         1: .line 118
            new java.net.SocketException
            dup
            ldc "Socket Closed"
            invokespecial java.net.SocketException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 120
      StackMap locals:
      StackMap stack:
            iload 1 /* opt */
            bipush 15
            if_icmpne 8
         3: .line 121
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fd:Ljava/io/FileDescriptor;
            ifnull 5
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fd1:Ljava/io/FileDescriptor;
            ifnull 5
         4: .line 123
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.anyLocalBoundAddr:Ljava/net/InetAddress;
            areturn
         5: .line 125
      StackMap locals:
      StackMap stack:
            new java.net.InetAddressContainer
            dup
            invokespecial java.net.InetAddressContainer.<init>:()V
            astore 2 /* in */
        start local 2 // java.net.InetAddressContainer in
         6: .line 126
            aload 0 /* this */
            iload 1 /* opt */
            aload 2 /* in */
            invokevirtual java.net.TwoStacksPlainSocketImpl.socketGetOption:(ILjava/lang/Object;)I
            pop
         7: .line 127
            aload 2 /* in */
            getfield java.net.InetAddressContainer.addr:Ljava/net/InetAddress;
            areturn
        end local 2 // java.net.InetAddressContainer in
         8: .line 128
      StackMap locals:
      StackMap stack:
            iload 1 /* opt */
            iconst_4
            if_icmpne 10
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.exclusiveBind:Z
            ifeq 10
         9: .line 130
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.isReuseAddress:Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            areturn
        10: .line 132
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* opt */
            invokespecial java.net.AbstractPlainSocketImpl.getOption:(I)Ljava/lang/Object;
            areturn
        end local 1 // int opt
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  this  Ljava/net/TwoStacksPlainSocketImpl;
            0   11     1   opt  I
            6    8     2    in  Ljava/net/InetAddressContainer;
    Exceptions:
      throws java.net.SocketException
    MethodParameters:
      Name  Flags
      opt   

  void socketBind(java.net.InetAddress, int);
    descriptor: (Ljava/net/InetAddress;I)V
    flags: (0x0000) 
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // java.net.TwoStacksPlainSocketImpl this
        start local 1 // java.net.InetAddress address
        start local 2 // int port
         0: .line 137
            aload 0 /* this */
            aload 1 /* address */
            iload 2 /* port */
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.exclusiveBind:Z
            invokevirtual java.net.TwoStacksPlainSocketImpl.socketBind:(Ljava/net/InetAddress;IZ)V
         1: .line 138
            return
        end local 2 // int port
        end local 1 // java.net.InetAddress address
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Ljava/net/TwoStacksPlainSocketImpl;
            0    2     1  address  Ljava/net/InetAddress;
            0    2     2     port  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      address  
      port     

  void socketSetOption(int, boolean, java.lang.Object);
    descriptor: (IZLjava/lang/Object;)V
    flags: (0x0000) 
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // java.net.TwoStacksPlainSocketImpl this
        start local 1 // int opt
        start local 2 // boolean on
        start local 3 // java.lang.Object value
         0: .line 145
            iload 1 /* opt */
            iconst_4
            if_icmpne 2
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.exclusiveBind:Z
            ifeq 2
         1: .line 146
            aload 0 /* this */
            iload 2 /* on */
            putfield java.net.TwoStacksPlainSocketImpl.isReuseAddress:Z
            goto 3
         2: .line 148
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* opt */
            iload 2 /* on */
            aload 3 /* value */
            invokevirtual java.net.TwoStacksPlainSocketImpl.socketNativeSetOption:(IZLjava/lang/Object;)V
         3: .line 149
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.lang.Object value
        end local 2 // boolean on
        end local 1 // int opt
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    4     0   this  Ljava/net/TwoStacksPlainSocketImpl;
            0    4     1    opt  I
            0    4     2     on  Z
            0    4     3  value  Ljava/lang/Object;
    Exceptions:
      throws java.net.SocketException
    MethodParameters:
       Name  Flags
      opt    
      on     
      value  

  protected void close();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // java.net.TwoStacksPlainSocketImpl this
         0: .line 156
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fdLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 157
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fd:Ljava/io/FileDescriptor;
            ifnonnull 2
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fd1:Ljava/io/FileDescriptor;
            ifnull 18
         2: .line 158
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.stream:Z
            ifne 4
         3: .line 159
            invokestatic sun.net.ResourceManager.afterUdpClose:()V
         4: .line 161
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fdUseCount:I
            ifne 14
         5: .line 162
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.closePending:Z
            ifeq 8
         6: .line 163
            aload 1
            monitorexit
         7: return
         8: .line 165
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield java.net.TwoStacksPlainSocketImpl.closePending:Z
         9: .line 166
            aload 0 /* this */
            invokevirtual java.net.TwoStacksPlainSocketImpl.socketClose:()V
        10: .line 167
            aload 0 /* this */
            aconst_null
            putfield java.net.TwoStacksPlainSocketImpl.fd:Ljava/io/FileDescriptor;
        11: .line 168
            aload 0 /* this */
            aconst_null
            putfield java.net.TwoStacksPlainSocketImpl.fd1:Ljava/io/FileDescriptor;
        12: .line 169
            aload 1
            monitorexit
        13: return
        14: .line 177
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.closePending:Z
            ifne 18
        15: .line 178
            aload 0 /* this */
            iconst_1
            putfield java.net.TwoStacksPlainSocketImpl.closePending:Z
        16: .line 179
            aload 0 /* this */
            dup
            getfield java.net.TwoStacksPlainSocketImpl.fdUseCount:I
            iconst_1
            isub
            putfield java.net.TwoStacksPlainSocketImpl.fdUseCount:I
        17: .line 180
            aload 0 /* this */
            invokevirtual java.net.TwoStacksPlainSocketImpl.socketClose:()V
        18: .line 156
      StackMap locals:
      StackMap stack:
            aload 1
            monitorexit
        19: goto 22
      StackMap locals:
      StackMap stack: java.lang.Throwable
        20: aload 1
            monitorexit
        21: athrow
        22: .line 185
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   23     0  this  Ljava/net/TwoStacksPlainSocketImpl;
      Exception table:
        from    to  target  type
           1     7      20  any
           8    13      20  any
          14    19      20  any
          20    21      20  any
    Exceptions:
      throws java.io.IOException

  void reset();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.net.TwoStacksPlainSocketImpl this
         0: .line 189
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fd:Ljava/io/FileDescriptor;
            ifnonnull 1
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fd1:Ljava/io/FileDescriptor;
            ifnull 2
         1: .line 190
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual java.net.TwoStacksPlainSocketImpl.socketClose:()V
         2: .line 192
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield java.net.TwoStacksPlainSocketImpl.fd:Ljava/io/FileDescriptor;
         3: .line 193
            aload 0 /* this */
            aconst_null
            putfield java.net.TwoStacksPlainSocketImpl.fd1:Ljava/io/FileDescriptor;
         4: .line 194
            aload 0 /* this */
            invokespecial java.net.AbstractPlainSocketImpl.reset:()V
         5: .line 195
            return
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Ljava/net/TwoStacksPlainSocketImpl;
    Exceptions:
      throws java.io.IOException

  public boolean isClosedOrPending();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // java.net.TwoStacksPlainSocketImpl this
         0: .line 206
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fdLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 207
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.closePending:Z
            ifne 2
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fd:Ljava/io/FileDescriptor;
            ifnonnull 4
            aload 0 /* this */
            getfield java.net.TwoStacksPlainSocketImpl.fd1:Ljava/io/FileDescriptor;
            ifnonnull 4
         2: .line 208
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 1
            monitorexit
         3: iconst_1
            ireturn
         4: .line 210
      StackMap locals:
      StackMap stack:
            aload 1
            monitorexit
         5: iconst_0
            ireturn
         6: .line 206
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 1
            monitorexit
         7: athrow
        end local 0 // java.net.TwoStacksPlainSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Ljava/net/TwoStacksPlainSocketImpl;
      Exception table:
        from    to  target  type
           1     3       6  any
           4     5       6  any
           6     7       6  any

  static native void initProto();
    descriptor: ()V
    flags: (0x0108) ACC_STATIC, ACC_NATIVE

  native void socketCreate(boolean);
    descriptor: (Z)V
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      isServer  

  native void socketConnect(java.net.InetAddress, int, int);
    descriptor: (Ljava/net/InetAddress;II)V
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      address  
      port     
      timeout  

  native void socketBind(java.net.InetAddress, int, boolean);
    descriptor: (Ljava/net/InetAddress;IZ)V
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      address   
      port      
      exclBind  

  native void socketListen(int);
    descriptor: (I)V
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      count  

  native void socketAccept(java.net.SocketImpl);
    descriptor: (Ljava/net/SocketImpl;)V
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      s     

  native int socketAvailable();
    descriptor: ()I
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.io.IOException

  native void socketClose0(boolean);
    descriptor: (Z)V
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                  Name  Flags
      useDeferredClose  

  native void socketShutdown(int);
    descriptor: (I)V
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      howto  

  native void socketNativeSetOption(int, boolean, java.lang.Object);
    descriptor: (IZLjava/lang/Object;)V
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.net.SocketException
    MethodParameters:
       Name  Flags
      cmd    
      on     
      value  

  native int socketGetOption(int, java.lang.Object);
    descriptor: (ILjava/lang/Object;)I
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.net.SocketException
    MethodParameters:
                Name  Flags
      opt             
      iaContainerObj  

  native void socketSendUrgentData(int);
    descriptor: (I)V
    flags: (0x0100) ACC_NATIVE
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      data  
}
SourceFile: "TwoStacksPlainSocketImpl.java"