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

通讯编程

开发平台:

Visual C++

  1. '" 
  2. '" Copyright (c) 1996 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: fblocked.n,v 1.4.8.1 2004/10/27 12:52:39 dkf Exp $
  8. .so man.macros
  9. .TH fblocked n 7.5 Tcl "Tcl Built-In Commands"
  10. .BS
  11. '" Note:  do not modify the .SH NAME line immediately below!
  12. .SH NAME
  13. fblocked - Test whether the last input operation exhausted all available input
  14. .SH SYNOPSIS
  15. fBfblocked fIchannelIdfR
  16. .BE
  17. .SH DESCRIPTION
  18. .PP
  19. The fBfblockedfR command returns 1 if the most recent input operation
  20. on fIchannelIdfR returned less information than requested because all
  21. available input was exhausted.
  22. For example, if fBgetsfR is invoked when there are only three
  23. characters available for input and no end-of-line sequence, fBgetsfR
  24. returns an empty string and a subsequent call to fBfblockedfR will
  25. return 1.
  26. .PP
  27. .VS
  28. fIChannelIdfR must be an identifier for an open channel such as a
  29. Tcl standard channel (fBstdinfR, fBstdoutfR, or fBstderrfR),
  30. the return value from an invocation of fBopenfR or fBsocketfR, or
  31. the result of a channel creation command provided by a Tcl extension.
  32. .VE
  33. .SH EXAMPLE
  34. The fBfblockedfR command is particularly useful when writing network
  35. servers, as it allows you to write your code in a line-by-line style
  36. without preventing the servicing of other connections.  This can be
  37. seen in this simple echo-service:
  38. .PP
  39. .CS
  40. # This is called whenever a new client connects to the server
  41. proc connect {chan host port} {
  42.     set clientName [format <%s:%d> $host $port]
  43.     puts "connection from $clientName"
  44.     fconfigure $chan -blocking 0 -buffering line
  45.     fileevent $chan readable [list echoLine $chan $clientName]
  46. }
  47. # This is called whenever either at least one byte of input
  48. # data is available, or the channel was closed by the client.
  49. proc echoLine {chan clientName} {
  50.     gets $chan line
  51.     if {[eof $chan]} {
  52.         puts "finishing connection from $clientName"
  53.         close $chan
  54.     } elseif {![fBfblockedfR $chan]} {
  55.         # Didn't block waiting for end-of-line
  56.         puts "$clientName - $line"
  57.         puts $chan $line
  58.     }
  59. }
  60. # Create the server socket and enter the event-loop to wait
  61. # for incoming connections...
  62. socket -server connect 12345
  63. vwait forever
  64. .CE
  65. .SH "SEE ALSO"
  66. gets(n), open(n), read(n), socket(n), Tcl_StandardChannels(3)
  67. .SH KEYWORDS
  68. blocking, nonblocking