137 lines
5.7 KiB
HTML
137 lines
5.7 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||
<html>
|
||
<head>
|
||
<title>socket</title>
|
||
</head>
|
||
<body>
|
||
<h1>socket</h1>
|
||
|
||
<p>Команда открывает сетевое TCP-соединение.<p>
|
||
|
||
<h2>СИНТАКСИС</h2>
|
||
<pre>
|
||
<strong>socket</strong> ?<em>options</em>? <em>host</em> <em>port</em>
|
||
<strong>socket</strong> <strong>-server</strong> <em>command</em> ?<em>options</em>? <em>port</em>
|
||
</pre>
|
||
|
||
<h2><a name="ОПИСАНИЕ"></a>ОПИСАНИЕ</h2>
|
||
|
||
<p>Эта команда открывает сетевое соединение и возвращает
|
||
идентификатор канала, который может использоваться в
|
||
последующих командах <strong><a href="read.html">read</a></strong>,
|
||
<a href="puts.html"><strong>puts</strong></a> или
|
||
<strong><a href="flush.html">flush</a></strong>. В настоящее время
|
||
поддерживается только протокол TCP. Команда может
|
||
использоваться для открытия соединения как со стороны
|
||
сервера, так и со стороны клиента.</p>
|
||
|
||
<h3><a name="КЛИЕНТСКОЕ СОЕДИНЕНИЕ"></a>КЛИЕНТСКОЕ СОЕДИНЕНИЕ</h3>
|
||
|
||
<p>Если опция <strong>-server</strong> не указана, то канал открывается со
|
||
стороны клиента, и возвращаемый идентификатор канала может быть
|
||
использован для операции чтения и записи. Аргументы <em>port</em>
|
||
и <em>host</em> задают порт для соединения. По данному порту
|
||
должен быть сервер, обслуживающий соединение. Аргумент
|
||
<em>port</em> должен быть целым числом, а <em>host</em> - адресом
|
||
машины в доменном стиле (например, <strong>www.sunlabs.com</strong>) или
|
||
числовым IP-адресом (например, <strong>127.0.0.1</strong>). Для ссылки на
|
||
локальную машину, на которой выполняется команда, можно
|
||
использовать значение <em>localhost</em>.</p>
|
||
|
||
<p>Для задания дополнительной информации о соединении можно
|
||
использовать следующие опции.</p>
|
||
|
||
<dl>
|
||
<dt><strong>-myaddr</strong> <em>addr</em></dt>
|
||
|
||
<dd>Аргумент <em>addr</em> задает доменный или числовой адрес
|
||
сетевого интерфейса клиентской стороны для упрощения
|
||
соединения. Эта опция может быть полезна, если на клиентской
|
||
машине есть несколько сетевых интерфейсов. Если опция не
|
||
указана, системный интерфейс будет выбран операционной
|
||
системой.</dd>
|
||
|
||
<dt><strong>-myport</strong> <em>port</em></dt>
|
||
|
||
<dd>Аргумент <em>port</em> задает номер порта для клиентской
|
||
стороны соединения. Если опция не указана, номер порта для
|
||
клиента будет определен операционной системой.</dd>
|
||
|
||
<dt><strong>-async</strong></dt>
|
||
|
||
<dd>Использование опции <strong>-async</strong> приведет к тому, что
|
||
клиент будет подсоединен в асинхронном режиме. Это значит, что
|
||
сокет будет создан немедленно, возможно, еще до установления
|
||
связи с сервером. Если канал открыт в блокирующем режиме, то
|
||
при выполнении команды <a href= "gets.html"><strong>gets</strong></a>
|
||
или <a href="flush.html"><strong>flush</strong></a> по такому сокету,
|
||
команда завершится только после того, как процесс установления
|
||
соединения будет завершен. Если канал открыт в неблокирующем
|
||
режиме, то в этой ситуации команда завершится немедленно, а
|
||
команда <a href= "fblocked.html"><strong>fblocked</strong></a> для
|
||
данного канала возвратит <strong>1</strong>.</dd>
|
||
</dl>
|
||
|
||
<h3><a name="СЕРВЕРНОЕ СОЕДИНЕНИЕ"></a>СЕРВЕРНОЕ СОЕДИНЕНИЕ</h3>
|
||
|
||
<p>Если в команде присутствует опция <strong>-server</strong>, то новый
|
||
сокет будет сервером для порта <em>port</em>. Tcl будет
|
||
автоматически устанавливать соединения по данному порту. Для
|
||
каждого соединения будет создаваться новый канал, который может
|
||
быть использован для связи с клиентом. При этом Tcl выполняет
|
||
команду <em>command</em> с тремя дополнительными аргументами: имя
|
||
нового канала, адрес клиентской машины в сетевой нотации и номер
|
||
порта клиента.</p>
|
||
|
||
<p>В команде можно использовать следующие опции:</p>
|
||
|
||
<dl>
|
||
<dt><strong>-myaddr</strong> <em>addr</em></dt>
|
||
|
||
<dd>Аргумент <em>addr</em> задает доменный или числовой адрес
|
||
сетевого интерфейса серверной стороны для упрощения
|
||
соединения. Эта опция может быть полезна, если на серверной
|
||
машине есть несколько сетевых интерфейсов. Если опция не
|
||
указана, сокет связывается со специальным адресом INADDR_ANY,
|
||
который позволяет принимать соединения от любого
|
||
интерфейса.</dd>
|
||
</dl>
|
||
|
||
<p>Канал сервера не может быть использован для приема или выдачи
|
||
данных. Его единственное назначение - принимать новые клиентские
|
||
подсоединения. Каналы, открываемые для каждого клиентского
|
||
соединения, открываются на чтение и запись. Закрытие серверного
|
||
канала вызывает отключение сервера, так что никаких новых
|
||
соединений не может быть выполнено. Однако существующие
|
||
соединения сохраняются.</p>
|
||
|
||
<p>Сокет сервера не может обнаружить новое соединение при
|
||
незапущенном обработчике событий. Поэтому в приложении должен
|
||
быть запущен обработчик событий, например, командой <strong><a
|
||
href="vwait.html">vwait</a></strong>.</p>
|
||
|
||
<h2><a name="КОНФИГУРАЦИОННЫЕ ОПЦИИ"></a>КОНФИГУРАЦИОННЫЕ ОПЦИИ</h2>
|
||
|
||
<p>Команда <strong><a href="fconfigure.html">fconfigure</a></strong> может
|
||
получить значения нескольких неизменяемых опций для сокетов:
|
||
|
||
<dl>
|
||
|
||
<dt><strong>-sockname</strong></dt>
|
||
|
||
<dd>Эта опция возвращает список из трех элементов: адреса, имени
|
||
хоста и номера порта для сокета. Если имя хоста не может быть
|
||
определено, второй элемент списка совпадает с первым
|
||
адресом.</dd>
|
||
|
||
<dt><strong>-peername</strong></dt>
|
||
|
||
<dd>Эта опция не поддерживается для сокетов сервера. Для
|
||
сокетов клиента и установленных соединений она выдает список
|
||
из трех элементов: адреса, имени хоста и номера порта для
|
||
сокета. Если имя хоста не может быть определено, второй
|
||
элемент списка совпадает с первым - адресом.</dd>
|
||
</dl>
|
||
</body>
|
||
</html>
|