## Tcl8.6.17/Tk8.6.17 Documentation > Tcl C API > OpenTcp

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    Tcl_OpenTcpClient, Tcl_MakeTcpClientChannel, Tcl_OpenTcpServer — TCP 受け口を使用して通信路を開ける手続き函数 procedures to open channels using TCP sockets
  SYNOPSIS
    #include <tcl.h>
    Tcl_Channel
    Tcl_OpenTcpClient(interp, port, host, myaddr, myport, async)
    Tcl_Channel
    Tcl_MakeTcpClientChannel(sock)
    Tcl_Channel
    Tcl_OpenTcpServer(interp, port, myaddr, proc, clientData)
  引数 ARGUMENTS
    Tcl_Interp *interp (入力in)
    int port (入力in)
    const char *host (入力in)
    int myport (入力in)
    const char *myaddr (入力in)
    int async (入力in)
    ClientData sock (入力in)
    Tcl_TcpAcceptProc *proc (入力in)
    ClientData clientData (入力in)
  説明 DESCRIPTION
  TCL_OPENTCPCLIENT
  TCL_MAKETCPCLIENTCHANNEL
  TCL_OPENTCPSERVER
  OSの問題 PLATFORM ISSUES
  SEE ALSO
  KEYWORDS

### NAME

Tcl_OpenTcpClient, Tcl_MakeTcpClientChannel, Tcl_OpenTcpServer — TCP 受け口を使用して通信路を開ける手続き函数 procedures to open channels using TCP sockets

### SYNOPSIS

#include <tcl.h>
Tcl_Channel
Tcl_OpenTcpClient(interp, port, host, myaddr, myport, async)
Tcl_Channel
Tcl_MakeTcpClientChannel(sock)
Tcl_Channel
Tcl_OpenTcpServer(interp, port, myaddr, proc, clientData)

### 引数 ARGUMENTS

Tcl_Interp *interp (入力in)
  不都合の報告に使う為の解釈実行機能｡もし非NULL であって､且つ不都合が生じた場合､不都合伝言文が解釈実行機能の結果の値に残される｡　 Tcl interpreter to use for error reporting. If non-NULL and an error occurs, an error message is left in the interpreter's result.

int port (入力in)
  依頼者として接続すべき､或いは､中央集中処理装置として聴き取るべき通信処理番号｡　 A port number to connect to as a client or to listen on as a server.

const char *host (入力in)
  亭主の名前又は接続の遠隔地端末の為の番地を指定する文字列｡　 A string specifying a host name or address for the remote end of the connection.

int myport (入力in)
  依頼人の端末の受け口の為の通信処理番号｡もし0 なら､通信処理番号は無作為に割当てられている｡　 A port number for the client's end of the socket. If 0, a port number is allocated at random.

const char *myaddr (入力in)
  亭主の名前若しくは､接続の地方終端の為に使われる電網対話機能の番地を指し示している文字列｡もし NULL なら無為設定の対話機能が選択される｡　 A string specifying the host name or address for network interface to use for the local end of the connection. If NULL, a default interface is chosen.

int async (入力in)
  もし､非零の場合､依頼者受け口は中央集中処理に非同期で接続される｡ If nonzero, the client socket is connected asynchronously to the server.

ClientData sock (入力in)
  依頼者 TCP 受け口の為のOS固有の取っ手｡　 Platform-specific handle for client TCP socket.

Tcl_TcpAcceptProc *proc (入力in)
  新しい接続が受け口経由で受容れられる毎に起動すべき手続函数への指示子｡　 Pointer to a procedure to invoke each time a new connection is accepted via the socket.

ClientData clientData (入力in)
  手続函数に渡す任意の一語値｡　 Arbitrary one-word value to pass to proc.

### 説明 DESCRIPTION

これ等の函数は TCP 受け口を通して通信する通信路を作成する為に便利な手続函数である｡通信路上の操作は取扱説明書の Tcl_OpenFileChannel の見出しの内に記述されている｡ These functions are convenience procedures for creating channels that communicate over TCP sockets. The operations on a channel are described in the manual entry for Tcl_OpenFileChannel.

#### TCL_OPENTCPCLIENT

Tcl_OpenTcpClient は特定の host 上の通信処理番号portに接続された依頼者 TCP 受け口を開け､中央集中処理装置の通信に使える通信路を返す｡接続する為のホストは郡命名様式名(譬えば www.sunlabs.com)又は４バイトの番地を英数字含んで表す文字列(譬えば､ 127.0.0.1)としても指定できる｡そこで函数が起動される､ホスト上の TCP 受け口に接続する為の文字列 localhost を使われたい｡ Tcl_OpenTcpClient opens a client TCP socket connected to a port on a specific host, and returns a channel that can be used to communicate with the server. The host to connect to can be specified either as a domain name style name (e.g. www.sunlabs.com), or as a string containing the alphanumeric representation of its four-byte address (e.g. 127.0.0.1). Use the string localhost to connect to a TCP socket on the host on which the function is invoked.

myaddr と myport は依頼側に局所末尾の接続の為の番地の指定を許容する｡もし myaddr が NULL の場合､相互作用がOSによって自動的に選択される｡もし myport が 0 の場合､OSにより通信処理譜番号が無作為に選択される｡ The myaddr and myport arguments allow a client to specify an address for the local end of the connection. If myaddr is NULL, then an interface is chosen automatically by the operating system. If myport is 0, then a port number is chosen at random by the operating system.

もし async が零の場合､ Tcl_OpenTcpClient への呼出しは､依頼側受け口が中央集中処理装置に成功裏に接続されたか､試みた接続が失敗したかの後でのみ戻る｡もし async が非零の場合､受け口は非同期的に接続され､返される通信路は､ Tcl_OpenTcpClient への呼出が戻る時に未だ中央集中処理装置に接続されていないかもしれない｡もし通信路が同期様式で入力と出力操作が接続が完了するか失敗する前に就労すると､その操作は接続が成功裏に完了するか失敗するまで待たされる｡もし通信路が非同期様式であると､入力か出力操作は直ぐに返り､引続く通信路上の Tcl_InputBlocked への呼出しは非零を返す｡ If async is zero, the call to Tcl_OpenTcpClient returns only after the client socket has either successfully connected to the server, or the attempted connection has failed. If async is nonzero the socket is connected asynchronously and the returned channel may not yet be connected to the server when the call to Tcl_OpenTcpClient returns. If the channel is in blocking mode and an input or output operation is done on the channel before the connection is completed or fails, that operation will wait until the connection either completes successfully or fails. If the channel is in nonblocking mode, the input or output operation will return immediately and a subsequent call to Tcl_InputBlocked on the channel will return nonzero.

返された通信路は読みと書きの為に開かれる｡もし受け口を開く間に不都合が生じると､ Tcl_OpenTcpClient は NULL を返し､ POSIX 不都合符号を記録する､それは Tcl_GetErrno により取戻すことができる｡更に､もし解釈実行機能が非-NULL の場合不都合伝言文が解釈実行機能の結果内に残される｡ The returned channel is opened for reading and writing. If an error occurs in opening the socket, Tcl_OpenTcpClient returns NULL and records a POSIX error code that can be retrieved with Tcl_GetErrno. In addition, if interp is non-NULL, an error message is left in the interpreter's result.

新しく作成された通信路は提供された解釈実行機能内に登録されない; 登録する為には､ Tcl_RegisterChannel を使う｡もし､標準通信路の一つ､ stdin か stdout か stderr が予め閉じられている場合､新しい通信路を作成する行動は､又標準通信路への置換えとして定義される｡ The newly created channel is not registered in the supplied interpreter; to register it, use Tcl_RegisterChannel. If one of the standard channels, stdin, stdout or stderr was previously closed, the act of creating the new channel also assigns it as a replacement for the standard channel.

#### TCL_MAKETCPCLIENTCHANNEL

Tcl_MakeTcpClientChannel は Tcl_Channel を作成する､それは既存の周囲の､OS固有の､依頼側 TCP 受け口の為の操作子である｡ Tcl_MakeTcpClientChannel creates a Tcl_Channel around an existing, platform specific, handle for a client TCP socket.

新しく作成された通信路は提供された解釈実行機能内に登録されない; 登録する為には､ Tcl_RegisterChannel を使う｡もし､標準通信路の一つ､ stdin か stdout か stderr が予め閉じられている場合､新しい通信路を作成する行動は､又標準通信路への置換えとして定義される｡ The newly created channel is not registered in the supplied interpreter; to register it, use Tcl_RegisterChannel. If one of the standard channels, stdin, stdout or stderr was previously closed, the act of creating the new channel also assigns it as a replacement for the standard channel.

#### TCL_OPENTCPSERVER

Tcl_OpenTcpServer は port に指定された局部ホスト上の TCP 受け口を開き､依頼側からのそれへの接続の要求を受付ける為 Tcl 行事の仕組みを使う｡ myaddr 引数は電網相互作用を指定する｡もし myaddr が NULL の場合､特別の番地 INADDR_ANY がどの電網相互作用からの接続を許容する為に使われるべきである｡それぞれの時に依頼者はこの受け口を接続する､ Tcl は新しい接続の為に通信路を作成している､亦､通信路に伝の情報を伴い proc を起動する｡ proc は次の原型に合致しなければならない: Tcl_OpenTcpServer opens a TCP socket on the local host on a specified port and uses the Tcl event mechanism to accept requests from clients to connect to it. The myaddr argument specifies the network interface. If myaddr is NULL the special address INADDR_ANY should be used to allow connections from any network interface. Each time a client connects to this socket, Tcl creates a channel for the new connection and invokes proc with information about the channel. Proc must match the following prototype:

    typedef void Tcl_TcpAcceptProc(
            ClientData clientData,
            Tcl_Channel channel,
            char *hostName,
            int port);

clientData 引数は Tcl_OpenTcpServer への clientData 引数と同じであり､ channel は新しい通信路のための処理子になり､ hostName は接続を作り上げる依頼側ホストの名前を含む文字列を指示する､亦 port は依頼側の接続用算譜番号を含む｡新しい通信路は入力と出力両方向けに開かれる｡もし､ proc が不都合を生じると接続は自動的に閉じられる｡ proc は返り値を有さないが､もし接続の拒絶を望む場合､ channel を閉じる｡ The clientData argument will be the same as the clientData argument to Tcl_OpenTcpServer, channel will be the handle for the new channel, hostName points to a string containing the name of the client host making the connection, and port will contain the client's port number. The new channel is opened for both input and output. If proc raises an error, the connection is closed automatically. Proc has no return value, but if it wishes to reject the connection it can close channel.

Tcl_OpenTcpServer は通常､中央処理装置受け口を表現している通信路へのポインターを返す｡もし不都合が生じると､Tcl_OpenTcpServer は NULL を返し､ POSIX 不都合符号を記録する､それは Tcl_GetErrno により取戻すことができる｡更に､もし解釈実行機能が非-NULL の場合不都合伝言文が解釈実行機能の結果内に残される｡ Tcl_OpenTcpServer normally returns a pointer to a channel representing the server socket. If an error occurs, Tcl_OpenTcpServer returns NULL and records a POSIX error code that can be retrieved with Tcl_GetErrno. In addition, if the interpreter is non-NULL, an error message is left in the interpreter's result.

Tcl_OpenTcpServer によって返された通信路は入力にも出力にも使えない｡それは単に受け口について接続を受入れる処理機能である｡呼出し側は､中央集中処理を閉鎖する為に通信路を閉じ､新しい依頼者からの更なる接続を不許可にできる｡ The channel returned by Tcl_OpenTcpServer cannot be used for either input or output. It is simply a handle for the socket used to accept connections. The caller can close the channel to shut down the server and disallow further connections from new clients.

TCP 中央集中処理通信路は Tcl_DoOneEvent を通して又は vwait の様な Tcl 命令を通して行事を急送する応用譜内でのみ正しく作動する; そうでない場合､ Tcl は隔離した依頼側から要求された接続が未決であることは決して通知しない｡ TCP server channels operate correctly only in applications that dispatch events through Tcl_DoOneEvent or through Tcl commands such as vwait; otherwise Tcl will never notice that a connection request from a remote client is pending.

新しく作成された通信路は提供された解釈実行機能内に登録されない; 登録する為には､ Tcl_RegisterChannel を使う｡もし､標準通信路の一つ､stdin か stdout か stderr が予め閉じられている場合､新しい通信路を作成する行動は､又標準通信路への置換えとして定義される｡ The newly created channel is not registered in the supplied interpreter; to register it, use Tcl_RegisterChannel. If one of the standard channels, stdin, stdout or stderr was previously closed, the act of creating the new channel also assigns it as a replacement for the standard channel.

### OSの問題 PLATFORM ISSUES

Unix 上では受け口処理は socket システム呼出しとして返される Unix ファイル記述子である｡ Windows 上では受け口処理は WinSock API 内で定義とされた SOCKET である｡ On Unix platforms, the socket handle is a Unix file descriptor as returned by the socket system call. On the Windows platform, the socket handle is a SOCKET as defined in the WinSock API.

### SEE ALSO

Tcl_OpenFileChannel, Tcl_RegisterChannel, vwait

### KEYWORDS

channel, client, server, socket, TCP
Copyright © 1996-7 Sun Microsystems, Inc.