退出TCL中的套接字而不终止应用程序

问题描述:

我试图在TCL中使用socket -server accept <port>命令建立一个套接字,然后使用vwait forever循环 - 最简单的套接字。退出TCL中的套接字而不终止应用程序

http://wiki.tcl.tk/15315

我能够连接到服务器不错,但我的问题是 - 如何关闭套接字,当它不再需要,而无需退出应用程序。

在我的应用程序一些背景:

  1. 它是一种新思工具与TCL的壳。

  2. 我打算使用TK构建一个GUI,理想情况下,我想在Python中为了可伸缩性的原因开发它(通过Synopsys TCL shell加上TK接口不是常规的TCL/TK接口)。

  3. forever事件循环运行时,shell不断侦听 - 使应用程序自己的TCL用户提示符不可用 - 我不希望当某些命令通过套接字运行时shell将可用,但我确实希望一旦套接字上的命令完成,shell就可用。 (我知道这将有点复杂的实现....但只是把问题了)

  4. 当我尝试使用穿过套接字的exit命令,应用程序(整个)被关闭。

是否有任何命令可以通过套接字关闭套接字而不关闭整个应用程序?

请让我知道是否需要更多细节。

致电exit将退出解释程序并导致过程关闭。通过在通道上使用close函数来关闭套接字。在连接客户端的服务器应用程序中有两个套接字。一旦处理了客户端的所有事务,您的服务器代码应在客户端套接字上调用close。这是在您创建服务器套接字时传入的回调函数中提供给您的代码的。服务器套接字也需要在某个时候关闭。你如何做到这一点取决于你的应用程序和平台。在unix系统上,你可以使用扩展来捕获一个信号来调用这个关闭函数。或者您可能会关闭服务器以响应来自控制套接字或标准输入通道的某些输入。解释器不会读取和解析输入,除非您添加代码来执行此操作。使用fileevent您可以安排从多个通道读取数据,并使用info complete,您可以从标准输入读取并评估输入以获取REPL循环进入您的服务器。一个implementation of this可以在网上找到,我想wiki也有一些例子。

+0

感谢您的链接!我会玩弄它,看看我是否能够为我的场景工作。 – sanjay