public final class com.mongodb.internal.connection.AsynchronousSocketChannelStream extends com.mongodb.internal.connection.AsynchronousChannelStream implements com.mongodb.connection.Stream
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.mongodb.internal.connection.AsynchronousSocketChannelStream
  super_class: com.mongodb.internal.connection.AsynchronousChannelStream
{
  private final com.mongodb.ServerAddress serverAddress;
    descriptor: Lcom/mongodb/ServerAddress;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.connection.SocketSettings settings;
    descriptor: Lcom/mongodb/connection/SocketSettings;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.nio.channels.AsynchronousChannelGroup group;
    descriptor: Ljava/nio/channels/AsynchronousChannelGroup;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public void <init>(com.mongodb.ServerAddress, com.mongodb.connection.SocketSettings, com.mongodb.connection.BufferProvider, java.nio.channels.AsynchronousChannelGroup);
    descriptor: (Lcom/mongodb/ServerAddress;Lcom/mongodb/connection/SocketSettings;Lcom/mongodb/connection/BufferProvider;Ljava/nio/channels/AsynchronousChannelGroup;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=5
        start local 0 // com.mongodb.internal.connection.AsynchronousSocketChannelStream this
        start local 1 // com.mongodb.ServerAddress serverAddress
        start local 2 // com.mongodb.connection.SocketSettings settings
        start local 3 // com.mongodb.connection.BufferProvider bufferProvider
        start local 4 // java.nio.channels.AsynchronousChannelGroup group
         0: .line 49
            aload 0 /* this */
            aload 1 /* serverAddress */
            aload 2 /* settings */
            aload 3 /* bufferProvider */
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream.<init>:(Lcom/mongodb/ServerAddress;Lcom/mongodb/connection/SocketSettings;Lcom/mongodb/connection/BufferProvider;)V
         1: .line 50
            aload 0 /* this */
            aload 1 /* serverAddress */
            putfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.serverAddress:Lcom/mongodb/ServerAddress;
         2: .line 51
            aload 0 /* this */
            aload 2 /* settings */
            putfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
         3: .line 52
            aload 0 /* this */
            aload 4 /* group */
            putfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.group:Ljava/nio/channels/AsynchronousChannelGroup;
         4: .line 53
            return
        end local 4 // java.nio.channels.AsynchronousChannelGroup group
        end local 3 // com.mongodb.connection.BufferProvider bufferProvider
        end local 2 // com.mongodb.connection.SocketSettings settings
        end local 1 // com.mongodb.ServerAddress serverAddress
        end local 0 // com.mongodb.internal.connection.AsynchronousSocketChannelStream this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lcom/mongodb/internal/connection/AsynchronousSocketChannelStream;
            0    5     1   serverAddress  Lcom/mongodb/ServerAddress;
            0    5     2        settings  Lcom/mongodb/connection/SocketSettings;
            0    5     3  bufferProvider  Lcom/mongodb/connection/BufferProvider;
            0    5     4           group  Ljava/nio/channels/AsynchronousChannelGroup;
    MethodParameters:
                Name  Flags
      serverAddress   final
      settings        final
      bufferProvider  final
      group           final

  public void openAsync(com.mongodb.connection.AsyncCompletionHandler<java.lang.Void>);
    descriptor: (Lcom/mongodb/connection/AsyncCompletionHandler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AsynchronousSocketChannelStream this
        start local 1 // com.mongodb.connection.AsyncCompletionHandler handler
         0: .line 57
            ldc "unopened"
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AsynchronousSocketChannelStream.getChannel:()Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
            ifnonnull 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack: java.lang.String
         1: iconst_0
      StackMap locals: com.mongodb.internal.connection.AsynchronousSocketChannelStream com.mongodb.connection.AsyncCompletionHandler
      StackMap stack: java.lang.String int
         2: invokestatic com.mongodb.assertions.Assertions.isTrue:(Ljava/lang/String;Z)V
         3: .line 58
            aload 0 /* this */
            aload 1 /* handler */
            new java.util.LinkedList
            dup
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.serverAddress:Lcom/mongodb/ServerAddress;
            invokevirtual com.mongodb.ServerAddress.getSocketAddresses:()Ljava/util/List;
            invokespecial java.util.LinkedList.<init>:(Ljava/util/Collection;)V
            invokevirtual com.mongodb.internal.connection.AsynchronousSocketChannelStream.initializeSocketChannel:(Lcom/mongodb/connection/AsyncCompletionHandler;Ljava/util/Queue;)V
         4: .line 59
            return
        end local 1 // com.mongodb.connection.AsyncCompletionHandler handler
        end local 0 // com.mongodb.internal.connection.AsynchronousSocketChannelStream this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lcom/mongodb/internal/connection/AsynchronousSocketChannelStream;
            0    5     1  handler  Lcom/mongodb/connection/AsyncCompletionHandler<Ljava/lang/Void;>;
    Signature: (Lcom/mongodb/connection/AsyncCompletionHandler<Ljava/lang/Void;>;)V
    MethodParameters:
         Name  Flags
      handler  final

  private void initializeSocketChannel(com.mongodb.connection.AsyncCompletionHandler<java.lang.Void>, java.util.Queue<java.net.SocketAddress>);
    descriptor: (Lcom/mongodb/connection/AsyncCompletionHandler;Ljava/util/Queue;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=9, locals=5, args_size=3
        start local 0 // com.mongodb.internal.connection.AsynchronousSocketChannelStream this
        start local 1 // com.mongodb.connection.AsyncCompletionHandler handler
        start local 2 // java.util.Queue socketAddressQueue
         0: .line 63
            aload 2 /* socketAddressQueue */
            invokeinterface java.util.Queue.isEmpty:()Z
            ifeq 3
         1: .line 64
            aload 1 /* handler */
            new com.mongodb.MongoSocketException
            dup
            ldc "Exception opening socket"
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.serverAddress:Lcom/mongodb/ServerAddress;
            invokespecial com.mongodb.MongoSocketException.<init>:(Ljava/lang/String;Lcom/mongodb/ServerAddress;)V
            invokeinterface com.mongodb.connection.AsyncCompletionHandler.failed:(Ljava/lang/Throwable;)V
         2: .line 65
            goto 20
         3: .line 66
      StackMap locals:
      StackMap stack:
            aload 2 /* socketAddressQueue */
            invokeinterface java.util.Queue.poll:()Ljava/lang/Object;
            checkcast java.net.SocketAddress
            astore 3 /* socketAddress */
        start local 3 // java.net.SocketAddress socketAddress
         4: .line 69
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.group:Ljava/nio/channels/AsynchronousChannelGroup;
            invokestatic java.nio.channels.AsynchronousSocketChannel.open:(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousSocketChannel;
            astore 4 /* attemptConnectionChannel */
        start local 4 // java.nio.channels.AsynchronousSocketChannel attemptConnectionChannel
         5: .line 70
            aload 4 /* attemptConnectionChannel */
            getstatic java.net.StandardSocketOptions.TCP_NODELAY:Ljava/net/SocketOption;
            iconst_1
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            invokevirtual java.nio.channels.AsynchronousSocketChannel.setOption:(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousSocketChannel;
            pop
         6: .line 71
            aload 4 /* attemptConnectionChannel */
            getstatic java.net.StandardSocketOptions.SO_KEEPALIVE:Ljava/net/SocketOption;
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
            invokevirtual com.mongodb.connection.SocketSettings.isKeepAlive:()Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            invokevirtual java.nio.channels.AsynchronousSocketChannel.setOption:(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousSocketChannel;
            pop
         7: .line 72
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
            invokevirtual com.mongodb.connection.SocketSettings.getReceiveBufferSize:()I
            ifle 9
         8: .line 73
            aload 4 /* attemptConnectionChannel */
            getstatic java.net.StandardSocketOptions.SO_RCVBUF:Ljava/net/SocketOption;
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
            invokevirtual com.mongodb.connection.SocketSettings.getReceiveBufferSize:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokevirtual java.nio.channels.AsynchronousSocketChannel.setOption:(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousSocketChannel;
            pop
         9: .line 75
      StackMap locals: java.net.SocketAddress java.nio.channels.AsynchronousSocketChannel
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
            invokevirtual com.mongodb.connection.SocketSettings.getSendBufferSize:()I
            ifle 11
        10: .line 76
            aload 4 /* attemptConnectionChannel */
            getstatic java.net.StandardSocketOptions.SO_SNDBUF:Ljava/net/SocketOption;
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
            invokevirtual com.mongodb.connection.SocketSettings.getSendBufferSize:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokevirtual java.nio.channels.AsynchronousSocketChannel.setOption:(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousSocketChannel;
            pop
        11: .line 79
      StackMap locals:
      StackMap stack:
            aload 4 /* attemptConnectionChannel */
            aload 3 /* socketAddress */
            aconst_null
        12: .line 80
            new com.mongodb.internal.connection.AsynchronousSocketChannelStream$OpenCompletionHandler
            dup
            aload 0 /* this */
            aload 1 /* handler */
            aload 2 /* socketAddressQueue */
            aload 4 /* attemptConnectionChannel */
            invokespecial com.mongodb.internal.connection.AsynchronousSocketChannelStream$OpenCompletionHandler.<init>:(Lcom/mongodb/internal/connection/AsynchronousSocketChannelStream;Lcom/mongodb/connection/AsyncCompletionHandler;Ljava/util/Queue;Ljava/nio/channels/AsynchronousSocketChannel;)V
        13: .line 79
            invokevirtual java.nio.channels.AsynchronousSocketChannel.connect:(Ljava/net/SocketAddress;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V
        end local 4 // java.nio.channels.AsynchronousSocketChannel attemptConnectionChannel
        14: .line 81
            goto 20
      StackMap locals: com.mongodb.internal.connection.AsynchronousSocketChannelStream com.mongodb.connection.AsyncCompletionHandler java.util.Queue java.net.SocketAddress
      StackMap stack: java.io.IOException
        15: astore 4 /* e */
        start local 4 // java.io.IOException e
        16: .line 82
            aload 1 /* handler */
            new com.mongodb.MongoSocketOpenException
            dup
            ldc "Exception opening socket"
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.serverAddress:Lcom/mongodb/ServerAddress;
            aload 4 /* e */
            invokespecial com.mongodb.MongoSocketOpenException.<init>:(Ljava/lang/String;Lcom/mongodb/ServerAddress;Ljava/lang/Throwable;)V
            invokeinterface com.mongodb.connection.AsyncCompletionHandler.failed:(Ljava/lang/Throwable;)V
        end local 4 // java.io.IOException e
        17: goto 20
        18: .line 83
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 4 /* t */
        start local 4 // java.lang.Throwable t
        19: .line 84
            aload 1 /* handler */
            aload 4 /* t */
            invokeinterface com.mongodb.connection.AsyncCompletionHandler.failed:(Ljava/lang/Throwable;)V
        end local 4 // java.lang.Throwable t
        end local 3 // java.net.SocketAddress socketAddress
        20: .line 87
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.util.Queue socketAddressQueue
        end local 1 // com.mongodb.connection.AsyncCompletionHandler handler
        end local 0 // com.mongodb.internal.connection.AsynchronousSocketChannelStream this
      LocalVariableTable:
        Start  End  Slot                      Name  Signature
            0   21     0                      this  Lcom/mongodb/internal/connection/AsynchronousSocketChannelStream;
            0   21     1                   handler  Lcom/mongodb/connection/AsyncCompletionHandler<Ljava/lang/Void;>;
            0   21     2        socketAddressQueue  Ljava/util/Queue<Ljava/net/SocketAddress;>;
            4   20     3             socketAddress  Ljava/net/SocketAddress;
            5   14     4  attemptConnectionChannel  Ljava/nio/channels/AsynchronousSocketChannel;
           16   17     4                         e  Ljava/io/IOException;
           19   20     4                         t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           4    14      15  Class java.io.IOException
           4    14      18  Class java.lang.Throwable
    Signature: (Lcom/mongodb/connection/AsyncCompletionHandler<Ljava/lang/Void;>;Ljava/util/Queue<Ljava/net/SocketAddress;>;)V
    MethodParameters:
                    Name  Flags
      handler             final
      socketAddressQueue  final

  public java.nio.channels.AsynchronousChannelGroup getGroup();
    descriptor: ()Ljava/nio/channels/AsynchronousChannelGroup;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.AsynchronousSocketChannelStream this
         0: .line 90
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousSocketChannelStream.group:Ljava/nio/channels/AsynchronousChannelGroup;
            areturn
        end local 0 // com.mongodb.internal.connection.AsynchronousSocketChannelStream this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AsynchronousSocketChannelStream;
}
SourceFile: "AsynchronousSocketChannelStream.java"
NestMembers:
  com.mongodb.internal.connection.AsynchronousSocketChannelStream$AsynchronousSocketChannelAdapter  com.mongodb.internal.connection.AsynchronousSocketChannelStream$OpenCompletionHandler
InnerClasses:
  private final AsynchronousSocketChannelAdapter = com.mongodb.internal.connection.AsynchronousSocketChannelStream$AsynchronousSocketChannelAdapter of com.mongodb.internal.connection.AsynchronousSocketChannelStream
  private OpenCompletionHandler = com.mongodb.internal.connection.AsynchronousSocketChannelStream$OpenCompletionHandler of com.mongodb.internal.connection.AsynchronousSocketChannelStream