Provided by: tcl8.6-doc_8.6.14+dfsg-1build1_all bug

NAME

       Tcl_OpenTcpClient,  Tcl_MakeTcpClientChannel,  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 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)                            A  port  number  for  the client's end of the socket.  If 0, a
                                                  port number is allocated at random.

       const 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  asynchronously  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 connection is
                                                  accepted via the socket.

       ClientData clientData (in)                 Arbitrary one-word value to pass to proc.
________________________________________________________________________________________________________________

DESCRIPTION

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

       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.

       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 creates a Tcl_Channel around an existing, platform specific, handle for a client
       TCP socket.

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

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

PLATFORM ISSUES

       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(3tcl), Tcl_RegisterChannel(3tcl), vwait(3tcl)

KEYWORDS

       channel, client, server, socket, TCP

Tcl                                                    8.0                               Tcl_OpenTcpClient(3tcl)