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

时间:2017-02-27 19:52:23

标签: tcl tk

我正在尝试使用socket -server accept <port>命令在TCL中构建套接字,然后使用vwait forever循环 - 最简单的套接字。

http://wiki.tcl.tk/15315

我可以很好地连接到服务器但我的问题是 - 如何在不再需要退出应用程序时关闭套接字。

我申请的一些背景信息:

  1. 这是一个带有TCL shell的Synopsys工具。

  2. 我正在计划使用TK构建GUI,理想情况下,我想在Python中开发它以实现可伸缩性(加上通过Synopsys TCL shell的TK接口不是常规的TCL / TK接口)。

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

  4. 当我尝试使用通过套接字传递的exit命令时,应用程序(整个应用程序)将关闭。

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

    如果需要更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

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