docs: private SocketIOChannel create(InetSocketAddress localAddress, TCPConnLink tcpConnLink) throws IOException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "create");
          }
  
          SocketIOChannel ioSocket = tcpChannel.createOutboundSocketIOChannel();
          Socket socket = ioSocket.getSocket();
          TCPChannelConfiguration tcpConfig = this.tcpChannel.getConfig();
  
          socket.setReuseAddress(tcpConfig.getSoReuseAddress());
  
          if ((tcpConfig.getReceiveBufferSize() >= RECEIVE_BUFFER_SIZE_MIN) && (tcpConfig.getReceiveBufferSize() <= RECEIVE_BUFFER_SIZE_MAX)) {
              socket.setReceiveBufferSize(tcpConfig.getReceiveBufferSize());
          }
  
          if ((tcpConfig.getSendBufferSize() >= SEND_BUFFER_SIZE_MIN) && (tcpConfig.getSendBufferSize() <= SEND_BUFFER_SIZE_MAX)) {
              socket.setSendBufferSize(tcpConfig.getSendBufferSize());
          }
  
          // need this check, or else the getLocalAddress call will return all zeroes
          // if we bind with a null localAddress here
          if (localAddress != null) {
              try {
                  socket.bind(localAddress);
  
                  InetAddress ia = localAddress.getAddress();
                  if (ia != null) {
                      ConnectionDescriptor cd = tcpConnLink.getVirtualConnection().getConnectionDescriptor();
  
                      if (cd != null) {
                          cd.setAddrs(null, ia);
                      } else {
                          ConnectionDescriptorImpl cdi = new ConnectionDescriptorImpl(null, ia);
                          tcpConnLink.getVirtualConnection().setConnectionDescriptor(cdi);
                      }
  
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "bound connection: " + tcpConnLink.getVirtualConnection().getConnectionDescriptor());
                      }
                  }
  
              } catch (IOException ioe) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Bind error making outbound connection " + ioe);
                  }
  
                  if (socket != null) {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "Socket closed on bind exception.");
                      }
                      socket.close();
                  }
  
                  FFDCFilter.processException(ioe, getClass().getName(), "create", this);
                  throw ioe;
              }
          }
  
          if (tcpConfig.getSoLinger() >= 0) {
              socket.setSoLinger(true, tcpConfig.getSoLinger());
          } else {
              socket.setSoLinger(false, 0);
          }
  
          socket.setKeepAlive(tcpConfig.getKeepAlive());
  
          socket.setTcpNoDelay(tcpConfig.getTcpNoDelay());
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "Socket created, local port: " + socket.getLocalPort());
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "create");
          }
  
          return ioSocket;
      }