OpenTcp.3
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1996-7 Sun Microsystems, Inc.
  3. '"
  4. '" See the file "license.terms" for information on usage and redistribution
  5. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  6. '"
  7. '" RCS: @(#) $Id: OpenTcp.3,v 1.4 2002/01/23 20:46:01 dgp Exp $
  8. .so man.macros
  9. .TH Tcl_OpenTcpClient 3 8.0 Tcl "Tcl Library Procedures"
  10. .BS
  11. '" Note:  do not modify the .SH NAME line immediately below!
  12. .SH NAME
  13. Tcl_OpenTcpClient, Tcl_MakeTcpClientChannel, Tcl_OpenTcpServer - procedures to open channels using TCP sockets
  14. .SH SYNOPSIS
  15. .nf
  16. fB#include <tcl.h> fR
  17. .sp
  18. Tcl_Channel
  19. fBTcl_OpenTcpClientfR(fIinterp, port, host, myaddr, myport, asyncfR)
  20. .sp
  21. Tcl_Channel
  22. fBTcl_MakeTcpClientChannelfR(fIsockfR)
  23. .sp
  24. Tcl_Channel
  25. fBTcl_OpenTcpServerfR(fIinterp, port, myaddr, proc, clientDatafR)
  26. .sp
  27. .SH ARGUMENTS
  28. .AS Tcl_ChannelType newClientProcPtr in
  29. .AP Tcl_Interp *interp in
  30. Tcl interpreter to use for error reporting.  If non-NULL and an
  31. error occurs, an error message is left in the interpreter's result.
  32. .AP int port in
  33. A port number to connect to as a client or to listen on as a server.
  34. .AP "CONST char" *host in
  35. A string specifying a host name or address for the remote end of the connection.
  36. .AP int myport in
  37. A port number for the client's end of the socket.  If 0, a port number
  38. is allocated at random.
  39. .AP "CONST char" *myaddr in
  40. A string specifying the host name or address for network interface to use
  41. for the local end of the connection.  If NULL, a default interface is
  42. chosen.
  43. .AP int async in
  44. If nonzero, the client socket is connected asynchronously to the server.
  45. .AP ClientData sock in
  46. Platform-specific handle for client TCP socket.
  47. .AP Tcl_TcpAcceptProc *proc in
  48. Pointer to a procedure to invoke each time a new connection is
  49. accepted via the socket.
  50. .AP ClientData clientData in
  51. Arbitrary one-word value to pass to fIprocfR.
  52. .BE
  53. .SH DESCRIPTION
  54. .PP
  55. These functions are convenience procedures for creating
  56. channels that communicate over TCP sockets.
  57. The operations on a channel
  58. are described in the manual entry for fBTcl_OpenFileChannelfR.
  59. .SH TCL_OPENTCPCLIENT
  60. .PP
  61. fBTcl_OpenTcpClientfR opens a client TCP socket connected to a fIportfR
  62. on a specific fIhostfR, and returns a channel that can be used to
  63. communicate with the server. The host to connect to can be specified either
  64. as a domain name style name (e.g. fBwww.sunlabs.comfR), or as a string
  65. containing the alphanumeric representation of its four-byte address (e.g.
  66. fB127.0.0.1fR). Use the string fBlocalhostfR to connect to a TCP socket on
  67. the host on which the function is invoked.
  68. .PP
  69. The fImyaddrfR and fImyportfR arguments allow a client to specify an
  70. address for the local end of the connection.  If fImyaddrfR is NULL, then
  71. an interface is chosen automatically by the operating system.
  72. If fImyportfR is 0, then a port number is chosen at random by
  73. the operating system.
  74. .PP
  75. If fIasyncfR is zero, the call to fBTcl_OpenTcpClientfR returns only
  76. after the client socket has either successfully connected to the server, or
  77. the attempted connection has failed.
  78. If fIasyncfR is nonzero the socket is connected asynchronously and the
  79. returned channel may not yet be connected to the server when the call to
  80. fBTcl_OpenTcpClientfR returns. If the channel is in blocking mode and an
  81. input or output operation is done on the channel before the connection is
  82. completed or fails, that operation will wait until the connection either
  83. completes successfully or fails. If the channel is in nonblocking mode, the
  84. input or output operation will return immediately and a subsequent call to
  85. fBTcl_InputBlockedfR on the channel will return nonzero.
  86. .PP
  87. The returned channel is opened for reading and writing.
  88. If an error occurs in opening the socket, fBTcl_OpenTcpClientfR returns
  89. NULL and records a POSIX error code that can be retrieved
  90. with fBTcl_GetErrnofR.
  91. In addition, if fIinterpfR is non-NULL, an error message
  92. is left in the interpreter's result.
  93. .PP
  94. The newly created channel is not registered in the supplied interpreter; to
  95. register it, use fBTcl_RegisterChannelfR.
  96. If one of the standard channels, fBstdin, stdoutfR or fBstderrfR was
  97. previously closed, the act of creating the new channel also assigns it as a
  98. replacement for the standard channel.
  99. .SH TCL_MAKETCPCLIENTCHANNEL
  100. .PP
  101. fBTcl_MakeTcpClientChannelfR creates a fBTcl_ChannelfR around an
  102. existing, platform specific, handle for a client TCP socket.
  103. .PP
  104. The newly created channel is not registered in the supplied interpreter; to
  105. register it, use fBTcl_RegisterChannelfR.
  106. If one of the standard channels, fBstdin, stdoutfR or fBstderrfR was
  107. previously closed, the act of creating the new channel also assigns it as a
  108. replacement for the standard channel.
  109. .SH TCL_OPENTCPSERVER
  110. .PP
  111. fBTcl_OpenTcpServerfR opens a TCP socket on the local host on a specified
  112. fIportfR and uses the Tcl event mechanism to accept requests from clients
  113. to connect to it.  The fImyaddrfP argument specifies the network interface.
  114. If fImyaddrfP is NULL the special address INADDR_ANY should be used to
  115. allow connections from any network interface.
  116. Each time a client connects to this socket, Tcl creates a channel
  117. for the new connection and invokes fIprocfR with information about
  118. the channel.  fIProcfR must match the following prototype:
  119. .CS
  120. typedef void Tcl_TcpAcceptProc(
  121. ClientData fIclientDatafR,
  122. Tcl_Channel fIchannelfR,
  123. char *fIhostNamefR,
  124. int fIportfP);
  125. .CE
  126. .PP
  127. The fIclientDatafR argument will be the same as the fIclientDatafR
  128. argument to fBTcl_OpenTcpServerfR, fIchannelfR will be the handle
  129. for the new channel, fIhostNamefR points to a string containing
  130. the name of the client host making the connection, and fIportfP
  131. will contain the client's port number.
  132. The new channel
  133. is opened for both input and output. 
  134. If fIprocfR raises an error, the connection is closed automatically.
  135. fIProcfR has no return value, but if it wishes to reject the
  136. connection it can close fIchannelfR.
  137. .PP
  138. fBTcl_OpenTcpServerfR normally returns a pointer to a channel
  139. representing the server socket.
  140. If an error occurs, fBTcl_OpenTcpServerfR returns NULL and
  141. records a POSIX error code that can be retrieved with fBTcl_GetErrnofR.
  142. In addition, if the interpreter is non-NULL, an error message
  143. is left in the interpreter's result.
  144. .PP
  145. The channel returned by fBTcl_OpenTcpServerfR cannot be used for
  146. either input or output.
  147. It is simply a handle for the socket used to accept connections.
  148. The caller can close the channel to shut down the server and disallow
  149. further connections from new clients.
  150. .PP
  151. TCP server channels operate correctly only in applications that dispatch
  152. events through fBTcl_DoOneEventfR or through Tcl commands such as
  153. fBvwaitfR; otherwise Tcl will never notice that a connection request from
  154. a remote client is pending.
  155. .PP
  156. The newly created channel is not registered in the supplied interpreter; to
  157. register it, use fBTcl_RegisterChannelfR.
  158. If one of the standard channels, fBstdin, stdoutfR or fBstderrfR was
  159. previously closed, the act of creating the new channel also assigns it as a
  160. replacement for the standard channel.
  161. .VS
  162. .SH "PLATFORM ISSUES"
  163. .PP
  164. On Unix platforms, the socket handle is a Unix file descriptor as
  165. returned by the fBsocketfR system call.  On the Windows platform, the
  166. socket handle is a fBSOCKETfR as defined in the WinSock API.  On the
  167. Macintosh platform, the socket handle is a fBStreamPtrfR.
  168. .VE
  169. .SH "SEE ALSO"
  170. Tcl_OpenFileChannel(3), Tcl_RegisterChannel(3), vwait(n)
  171. .SH KEYWORDS
  172. client, server, TCP