Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Tk fileevent不适用于Windows上的套接字_Perl_Tk - Fatal编程技术网

Perl Tk fileevent不适用于Windows上的套接字

Perl Tk fileevent不适用于Windows上的套接字,perl,tk,Perl,Tk,最近,我一直在用perl和Tk在windows上开发GUI应用程序。在这个环境中,有许多恼人的事情在Linux中可以正常工作。其中最令人恼火的是fileevent似乎不起作用。我有一个Net::Telnet会话,我将它传递给fileevent,在Linux中它工作正常,在windows中,回调永远不会被调用。我在perl monks上发现了几篇讨论变通方法的帖子,我认为涉及到轮询,这是不可取的。首先,有人知道为什么这不起作用吗?Select支持windows中的套接字,我怀疑有人在内部使用Sel

最近,我一直在用perl和Tk在windows上开发GUI应用程序。在这个环境中,有许多恼人的事情在Linux中可以正常工作。其中最令人恼火的是fileevent似乎不起作用。我有一个Net::Telnet会话,我将它传递给fileevent,在Linux中它工作正常,在windows中,回调永远不会被调用。我在perl monks上发现了几篇讨论变通方法的帖子,我认为涉及到轮询,这是不可取的。首先,有人知道为什么这不起作用吗?Select支持windows中的套接字,我怀疑有人在内部使用Select否?

windows上的rap是很难实现非阻塞套接字

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


除了轮询之外,我看到的另一种解决方法是在套接字句柄上调用
ioctl($socket,0x8004667e,1)
,其中是一个魔法数字,用于在Windows套接字上启用非阻塞行为。我在这方面取得了一些成功,但不知道将其应用于
Net::Telnet
套接字会产生什么意外后果。

Windows上的问题是很难实现非阻塞套接字

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

除了轮询之外,我看到的另一种解决方法是在套接字句柄上调用
ioctl($socket,0x8004667e,1)
,其中是一个魔法数字,用于在Windows套接字上启用非阻塞行为。我在这方面取得了一些成功,不知道将其应用于
Net::Telnet
套接字会产生什么意外后果。

例如,
ioctl(…)
技巧散布在整个代码中。。。但是脚本作者将它们全部注释掉,并使用“IO::Socket::Socks”模块的主要修改。(Tcl/)Tk在Windows上不使用select(),部分原因是Socket不是唯一有趣的事件生成器;它使用了低级API、线程和消息传递的复杂组合,而且…考虑所有细节让我感到恶心,但它是有效的。例如,
ioctl(…)
技巧散布在整个代码中。。。但是脚本作者将它们全部注释掉,并使用“IO::Socket::Socks”模块的主要修改。(Tcl/)Tk在Windows上不使用select(),部分原因是Socket不是唯一有趣的事件生成器;它使用了低级API、线程和消息传递的复杂组合,而且……考虑所有细节让我感到恶心,但它是有效的。