socket(3tcl)

NAME
socket - 打开一个 TCP 网络连接

总览 SYNOPSIS

socket ?options? host port

socket -server command ?options? port

描述 DESCRIPTION

这个命令打开一个网络套接口并返回将来可被 read、puts 和 flush 命令调用使用一个通道标识符。目前只支持 TCP 网络协议；将来的发行可能包括对补充协议的支持。依赖于是否指定了 -server 开关，可以使用 socket 命令来打开客户端或服务器端连接。

客户端套接口 CLIENT SOCKETS

如果未指定 -server 选项，则打开一个的连接的客户端并且命令返回一个可被用于读写的通道标识符。 Port 和 host 指定一个要连接到的端口；必须有一个服务器接受在这个端口上的连接。Port 是一个整数端口号而 host 要么是一个域名式样的名字如 www.sunlabs.com 要么是一个数值 IP 地址如127.0.0.1。 使用 localhost 来参照在其上调用这个命令的那个主机。

在 host 之前可以提供下列选项指定关于连接的补充信息:

-myaddr addr
    Addr 给出用于连接的客户端网络接口的域名式样的名字或数值 IP 地址。如果客户端机器有多个网络接口的话这个选项会有用处。如果省略了这个选项，则由系统软件选择客户端接口。

-myport port
    Port 指定用于连接的客户端的一个整数端口号。如果省略了这个选项，则由系统软件随机的选择客户端口号。

-async
    -async 选项将导致客户端套接口被异步的连接。这意味着这个套接口将被立即建立，但在到socket的调用返回的时候可能仍未连接到服务器上。在连接尝试成功或失败之前调用了 gets 或 flush 的时候，如果套接口在阻塞模式下，则将等待直到连接被完成或失败。如果套接口在非阻塞模式之下，而在连接尝试成功或失败之前调用了 gets 或 flush ，则操作立即返回，并且在套接口上的 fblocked 返回 1。

服务器套接口 SERVER SOCKETS

如果指定了 -server 选项，则新套接口将是用 port 给出的端口的一个服务器。Tcl 将自动接受到这个给定端口的连接。对于每个连接 Tcl 将建立可以用来同客户通信的一个新通道。Tcl 接着调用 command 并加上三个补充参数: 新通道的名字，用网络地址表示的客户的主机地址，和客户的端口号。

在 host 之前可以提供下列选项指定关于连接的补充信息:

-myaddr addr
     Addr 给出用于连接的服务器端网络接口的域名式样的名字或数值 IP 地址。如果服务器机器有多个网络接口的话这个选项会有用处。如果省略了这个选项，则服务器套接口被绑定到特殊地址 INADDR_ANY 上，这样它可以接受来自任何接口的连接。

服务器通道不能被用来输入或输出；它们唯一的用处是接受新的客户连接。为每个到来的客户连接建立的通道是为输入和输出而打开的。关闭服务器通道将关断服务器，这样就不能接受新连接了，不影响现存的连接。

服务器套接口依赖于 Tcl 事件机制来找出何时打开了新连接。如果应用未进入事件循环，例如通过调用 vwait 命令或调用 C 过程 Tcl_DoOneEvent，则不接受连接。

配置选项 CONFIGURATION OPTIONS
可以使用 fconfigure 命令来查询套接口通道的许多只读配置选项:

-error
    这个选项得到给定套接口的当前错误状态。在你需要确定一个异步连接操作是否成功的时候这个选项会有用处。如果有一个错误，则返回错误消息。如果没有错误，则返回空串。

-sockname
    这个选项返回三个元素的一个列表，分别是这个套接口的地址、主机名和端口号。如果不能计算出这个主机名，第二个元素等同与列表的第一个元素地址。

-peername
    服务器套接口不支持这个选项。对于客户和接受的套接口，这个选项返回三个元素的一个列表；它们是地址、主机名字和对等的套接口所连接或绑定到端口。如果不能计算出这个主机名，第二个元素等同与列表的第一个元素地址。

参见 SEE ALSO
flush(n), open(n), read(n)

关键字 KEYWORDS
bind, channel, connection, domain name, host, network address, socket, tcp

[中文版维护人]
寒蝉退士

[中文版最新更新]
2001/11/10

《中国 Linux 论坛 man 手册页翻译计划》:
http://cmpp.linuxforum.net

跋
本页面中文版由中文 man 手册页计划提供。
中文 man 手册页计划：https://github.com/man-pages-zh/manpages-zh