最近我一直在使用perl和Tk在Windows上开发GUI应用程序。在这种环境中有许多烦人的东西在Linux中运行良好。最令人讨厌的是fileevent似乎不起作用。我有一个Net :: Telnet会话,我传递给fileevent,在Linux中工作正常,在Windows中,回调永远不会被调用。我在perl僧侣上发现了几个讨论变通方法的帖子,我认为涉及民意调查,这是不可取的。首先,有谁知道为什么这不起作用?选择支持Windows中的套接字,我怀疑在内部使用select没有?
答案 0 :(得分:1)
Windows上的说法是很难实现非阻塞套接字。
在Unix中你可以调用$socket->blocking(0)
,这就是你要做的就是确保你的套接字读取不会在没有输入的情况下阻塞。在Windows中,这不起作用,您需要轮询它们以确保在您阅读之前有某些内容。
除了轮询之外,我见过的其他解决方法是在套接字句柄上调用ioctl($socket,0x8004667e,1)
,其中0x8004667e是一个幻数,可以在Windows套接字上启用非阻塞行为。我已经取得了不尽相同的成功,并且不知道将其应用于Net::Telnet
套接字的意外后果是什么。