ABCDEFGHIJKLMNOPQRSTUVWXYZ

OpenTcp

Tcl_OpenTcpClient(3)        Tcl Library Procedures        Tcl_OpenTcpClient(3)



______________________________________________________________________________

NAME
       Tcl_OpenTcpClient, Tcl_MakeTcpClientChannel, Tcl_OpenTcpServer - proce-
       dures 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  inter-
                                                      preter's result.

       int               port               (in)      A port number to connect
                                                      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
                                                      connection.

       int               myport             (in)      A port  number  for  the
                                                      client's   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
                                                      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  contain-
       ing  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 inter-
       face  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 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 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 inter-
       preter's result.

       The newly created channel is not  registered  in  the  supplied  inter-
       preter;  to  register it, use Tcl_RegisterChannel.  If one of the stan-
       dard 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 inter-
       preter; to register it, use Tcl_RegisterChannel.  If one of  the  stan-
       dard  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 con-
       nects 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 mak-
       ing  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  dis-
       patch  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 inter-
       preter; to register it, use Tcl_RegisterChannel.  If one of  the  stan-
       dard  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.  On the Macin- |
       tosh platform, the socket handle is a StreamPtr.


SEE ALSO
       Tcl_OpenFileChannel(3), Tcl_RegisterChannel(3), vwait(n)


KEYWORDS
       client, server, TCP



Tcl                                   8.0                 Tcl_OpenTcpClient(3)