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