2018-02-05 17:22:04 +03:00
|
|
|
|
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>socket</title>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<h1>socket</h1>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Команда открывает сетевое TCP-соединение.<p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2>СИНТАКСИС</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><strong>-myaddr</strong> <em>addr</em></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Аргумент <em>addr</em> задает доменный или числовой адрес
|
|
|
|
|
сетевого интерфейса клиентской стороны для упрощения
|
|
|
|
|
соединения. Эта опция может быть полезна, если на клиентской
|
|
|
|
|
машине есть несколько сетевых интерфейсов. Если опция не
|
|
|
|
|
указана, системный интерфейс будет выбран операционной
|
|
|
|
|
системой.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>-myport</strong> <em>port</em></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Аргумент <em>port</em> задает номер порта для клиентской
|
|
|
|
|
стороны соединения. Если опция не указана, номер порта для
|
|
|
|
|
клиента будет определен операционной системой.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>-async</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</dl>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h3><a name=СЕРВЕРНОЕ СОЕДИНЕНИЕ></a>СЕРВЕРНОЕ СОЕДИНЕНИЕ</h3>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если в команде присутствует опция <strong>-server</strong>, то новый
|
|
|
|
|
сокет будет сервером для порта <em>port</em>. Tcl будет
|
|
|
|
|
автоматически устанавливать соединения по данному порту. Для
|
|
|
|
|
каждого соединения будет создаваться новый канал, который может
|
|
|
|
|
быть использован для связи с клиентом. При этом Tcl выполняет
|
|
|
|
|
команду <em>command</em> с тремя дополнительными аргументами: имя
|
|
|
|
|
нового канала, адрес клиентской машины в сетевой нотации и номер
|
|
|
|
|
порта клиента.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>В команде можно использовать следующие опции:</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><strong>-myaddr</strong> <em>addr</em></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Аргумент <em>addr</em> задает доменный или числовой адрес
|
|
|
|
|
сетевого интерфейса серверной стороны для упрощения
|
|
|
|
|
соединения. Эта опция может быть полезна, если на серверной
|
|
|
|
|
машине есть несколько сетевых интерфейсов. Если опция не
|
|
|
|
|
указана, сокет связывается со специальным адресом INADDR_ANY,
|
|
|
|
|
который позволяет принимать соединения от любого
|
|
|
|
|
интерфейса.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</dl>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Канал сервера не может быть использован для приема или выдачи
|
|
|
|
|
данных. Его единственное назначение - принимать новые клиентские
|
|
|
|
|
подсоединения. Каналы, открываемые для каждого клиентского
|
|
|
|
|
соединения, открываются на чтение и запись. Закрытие серверного
|
|
|
|
|
канала вызывает отключение сервера, так что никаких новых
|
|
|
|
|
соединений не может быть выполнено. Однако существующие
|
|
|
|
|
соединения сохраняются.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Сокет сервера не может обнаружить новое соединение при
|
|
|
|
|
незапущенном обработчике событий. Поэтому в приложении должен
|
|
|
|
|
быть запущен обработчик событий, например, командой <strong><a
|
|
|
|
|
href=vwait.html>vwait</a></strong>.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2><a name=КОНФИГУРАЦИОННЫЕ ОПЦИИ></a>КОНФИГУРАЦИОННЫЕ ОПЦИИ</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Команда <strong><a href=fconfigure.html>fconfigure</a></strong> может
|
|
|
|
|
получить значения нескольких неизменяемых опций для сокетов:
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
|
|
|
|
|
<dt><strong>-sockname</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Эта опция возвращает список из трех элементов: адреса, имени
|
|
|
|
|
хоста и номера порта для сокета. Если имя хоста не может быть
|
|
|
|
|
определено, второй элемент списка совпадает с первым
|
|
|
|
|
адресом.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>-peername</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Эта опция не поддерживается для сокетов сервера. Для
|
|
|
|
|
сокетов клиента и установленных соединений она выдает список
|
|
|
|
|
из трех элементов: адреса, имени хоста и номера порта для
|
|
|
|
|
сокета. Если имя хоста не может быть определено, второй
|
|
|
|
|
элемент списка совпадает с первым - адресом.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</dl>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
|