Tk文件事件不能与Windows上的socket一起工作



最近我一直在用perl和Tk开发windows上的GUI应用程序。在这个环境中有许多恼人的东西在Linux中工作得很好。最恼人的一个问题是fileevent似乎不起作用。我有一个Net::Telnet会话,我传递给fileevent,在Linux中它工作得很好,在windows中,回调从未被调用。我发现了一些关于perl僧侣讨论解决方法的帖子,我认为涉及轮询,这是不希望的。首先,有人知道为什么这不起作用吗?选择支持套接字在窗口,我怀疑有使用选择内部没有?

Windows的缺点是很难实现非阻塞套接字。

在Unix中,您可以调用$socket->blocking(0),这就是您所要做的,以确保您的套接字读取在没有输入时不会阻塞。在Windows中,这不起作用,你需要在阅读之前对它们进行轮询,以确保有东西在那里。

除了轮询之外,我看到的另一个解决方案是在套接字句柄上调用ioctl($socket,0x8004667e,1),其中0x8004667e是一个神奇的数字,可以在Windows套接字上启用非阻塞行为。我有混合成功与此,不知道什么意想不到的后果可能是应用它到Net::Telnet套接字。

最新更新