type=page
status=published
title=create-transport
next=create-virtual-server.html
prev=create-threadpool.html
~~~~~~

= create-transport

[[create-transport-1]][[GSRFM00061]][[create-transport]]

== create-transport

Adds a new transport

[[sthref561]]

=== Synopsis

[source]
----
asadmin [asadmin-options] create-transport [--help]
[--acceptorthreads acceptor-threads]
[--buffersizebytes buffer-size]
[--bytebuffertype byte-buffer-type]
[--classname class-name]
[--displayconfiguration={false|true}]
[--enablesnoop={false|true}]
[--idlekeytimeoutseconds idle-key-timeout]
[--maxconnectionscount max-connections]
[--readtimeoutmillis read-timeout]
[--writetimeoutmillis write-timeout]
[--selectionkeyhandler selection-key-handler]
[--selectorpolltimeoutmillis selector-poll-timeout]
[--tcpnodelay={false|true}]
[--target target]
transport-name
----

[[sthref562]]

=== Description

The `create-transport` subcommand creates a transport for a network
listener. This subcommand is supported in remote mode only.

[[sthref563]]

=== Options

asadmin-options::
  Options for the `asadmin` utility. For information about these
  options, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.
`--help`::
`-?`::
  Displays the help text for the subcommand.
`--acceptorthreads`::
  The number of acceptor threads for the transport. The recommended
  value is the number of processors in the machine. The default value is `1`.
`--buffersizebytes`::
  The size, in bytes, of the buffer to be provided for input streams
  created by the network listener that references this transport. The
  default value is `8192`.
`--bytebuffertype`::
  The type of the buffer to be provided for input streams created by a
  network-listener. Allowed values are `HEAP` and `DIRECT`. The default
  value is `HEAP`.
`--classname`::
  The fully qualified name of the Java class that implements the
  transport. The default is `org.glassfish.grizzly.TCPSelectorHandler`.
`--displayconfiguration`::
  If `true`, flushes the internal network configuration to the server
  log. Useful for debugging, but reduces performance. The default is `false`.
`--enablesnoop`::
  If `true`, writes request/response information to the server log.
  Useful for debugging, but reduces performance. The default is `false`.
`--idlekeytimeoutseconds`::
  The idle key timeout. The default is `30` seconds.
`--maxconnectionscount`::
  The maximum number of connections for the network listener that
  references this transport. A value of `-1` specifies no limit. The
  default value is `4096`.
`--readtimeoutmillis`::
  The amount of time the server waits during the header and body parsing
  phase. The default is `30000` milliseconds, or 30 seconds.
`--writetimeoutmillis`::
  The amount of time the server waits before considering the remote
  client disconnected when writing the response. The default is `30000`
  milliseconds, or 30 seconds.
`--selectionkeyhandler`::
  The name of the selection key handler associated with this transport.
  There is no default.
`--selectorpolltimeoutmillis`::
  The number of milliseconds a NIO Selector blocks waiting for events
  (user requests). The default value is `1000` milliseconds.
`--tcpnodelay`::
  If `true`, the default, enables `TCP_NODELAY` (also called Nagle's
  algorithm). The default is `false`.
`--target`::
  Creates the transport only on the specified target. Valid values are
  as follows:

  `server`;;
    Creates the transport on the default server instance. This is the
    default value.
  configuration-name;;
    Creates the transport in the specified configuration.
  cluster-name;;
    Creates the transport on all server instances in the specified
    cluster.
  standalone-instance-name;;
    Creates the transport on the specified standalone server instance.

[[sthref564]]

=== Operands

transport-name::
  The name of the transport.

[[sthref565]]

=== Examples

[[GSRFM528]][[sthref566]]

==== Example 1   Creating a Transport

The following command creates a transport named `http1-trans` that uses
a non-default number of acceptor threads:

[source]
----
asadmin> create-transport --acceptorthreads 100 http1-trans
Command create-transport executed successfully.
----

[[sthref567]]

=== Exit Status

0::
  command executed successfully
1::
  error in executing the command

[[sthref568]]

=== See Also

link:asadmin.html#asadmin-1m[`asadmin`(1M)]

link:create-network-listener.html#create-network-listener-1[`create-network-listener`(1)],
link:delete-transport.html#delete-transport-1[`delete-transport`(1)],
link:list-transports.html#list-transports-1[`list-transports`(1)]


