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>
 | 
