Tcl_OpenTcpClient(3) Tcl Library Procedures Tcl_OpenTcpClient(3)_________________________________________________________________NAME
Tcl_OpenTcpClient, Tcl_OpenTcpServer - 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) Tcl inter-
preter to
use for
error
reporting.
If non-NULL
and an
error
occurs, an
error mes-
sage is
left in
interp->result.
int port (in) A port num-
ber to con-
nect to as
a client or
to listen
on as a
server.
char *host (in) A string
specifying
a host name
or address
for the
remote end
of the con-
nection.
int myport (in) A port num-
ber for the
client's
Tcl 7.5 1
Tcl_OpenTcpClient(3) Tcl Library Procedures Tcl_OpenTcpClient(3)
end of the
socket. If
0, a port
number is
allocated
at random.
char *myaddr (in) 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
asyn-
chronously
to the
server.
ClientData sock (in) Platform-
specific
handle for
client TCP
socket.
Tcl_TcpAcceptProc *proc (in) Pointer to
a procedure
to invoke
each time a
new connec-
tion is
accepted
via the
socket.
ClientData clientData (in) Arbitrary
one-word
value to
pass to
proc.
_________________________________________________________________Tcl 7.5 2
Tcl_OpenTcpClient(3) Tcl Library Procedures Tcl_OpenTcpClient(3)DESCRIPTION
These functions are convenience procedures for creating
channels that communicate over TCP sockets. The opera-
tions on a channel are described in the manual entry for
Tcl_OpenFileChannel.
TCL_OPENTCPCLIENT
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.
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.
If async is zero, the call to Tcl_OpenTcpClient returns
only after the client socket has either successfully con-
nected to the server, or the attempted connection has
failed. If async is nonzero the socket is connected asyn-
chronously and the returned channel may not yet be con-
nected 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 con-
nection 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.
The returned channel is opened for reading and writing.
If an error occurs in opening the socket, Tcl_OpenTcp-
Client 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
interp->result.
The newly created channel is not registered in the sup-
plied interpreter; to register it, use Tcl_RegisterChan-
nel. 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 7.5 3
Tcl_OpenTcpClient(3) Tcl Library Procedures Tcl_OpenTcpClient(3)TCL_MAKETCPCLIENTCHANNEL
Tcl_MakeTcpClientChannel creates a Tcl_Channel around an
existing, platform specific, handle for a client TCP
socket.
The newly created channel is not registered in the sup-
plied interpreter; to register it, use Tcl_RegisterChan-
nel. 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_OPENTCPSERVERTcl_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);
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 contain-
ing the name of the client host making the connection, and
port will contain the client's port number. The new chan-
nel 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 con-
nection it can close channel.
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 addi-
tion, if interp->result is non-NULL, an error message is
left in interp->result.
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 server channels operate correctly only in applications
that dispatch events through Tcl_DoOneEvent or through Tcl
Tcl 7.5 4
Tcl_OpenTcpClient(3) Tcl Library Procedures Tcl_OpenTcpClient(3)
commands such as vwait; otherwise Tcl will never notice
that a connection request from a remote client is pending.
The newly created channel is not registered in the sup-
plied interpreter; to register it, use Tcl_RegisterChan-
nel. 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.
SEE ALSOTcl_OpenFileChannel(3), Tcl_RegisterChannel(3), vwait(n)KEYWORDS
client, server, TCP
Tcl 7.5 5