Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
python中轮询套接字的问题_Python_Sockets_Fork_Polling - Fatal编程技术网

python中轮询套接字的问题

python中轮询套接字的问题,python,sockets,fork,polling,Python,Sockets,Fork,Polling,在我开始轮询循环后,在第一次迭代后打印的所有消息都需要我在终端中按enter键才能显示 #!/usr/bin/python import socket, select, os, pty, sys s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('', 5007)) s.listen(5) mypoll = select.poll() mypoll.register(s.fileno() ) while True:

在我开始轮询循环后,在第一次迭代后打印的所有消息都需要我在终端中按enter键才能显示

#!/usr/bin/python
import socket, select, os, pty, sys

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 5007))
s.listen(5)

mypoll = select.poll()
mypoll.register(s.fileno() )

while True:
    print "poll time"
    subr = mypoll.poll()
    for x in subr[0]:

        if x == s.fileno():
            conn, addr = s.accept()

            pid, fd = pty.fork()
            if pid != 0:
                mypoll.register(fd)
                print "done. go back to poll now"
            else:
                print "forked"
                #handles new connection

        else:
            data = os.read(x,1024)
            print data

在第一次迭代之后,您还没有注册pty fd,然后正在轮询它吗?并且它的fd永远不会等于套接字fd,因此您将读取pty fd。现在不是在你的终端上读吗?那么,键入返回值不会导致它“打印数据”吗?

在第一次迭代之后,您没有注册pty fd,然后轮询它吗?并且它的fd永远不会等于套接字fd,因此您将读取pty fd。现在不是在你的终端上读吗?那么,输入返回值不会导致它“打印数据”吗?

这个程序可能是我几个月来看到的最难遵循的流程。您应该在这里修复基本错误。您正在分叉一个将恢复与父级同时接受连接的子级-听起来很糟糕。您正在使用轮询循环重新注册子对象的控制终端,而不是接受的连接?我忘了将无限循环放在它应该处理新fork的位置。我希望我可以编辑它,这样我就可以用:while True:pass替换“#handles new connection”。这个程序可能是我几个月以来看到的最难遵循的流程。您应该在这里修复基本错误。您正在分叉一个将恢复与父级同时接受连接的子级-听起来很糟糕。您正在使用轮询循环重新注册子对象的控制终端,而不是接受的连接?我忘了将无限循环放在它应该处理新fork的位置。我希望我可以编辑它,这样我就可以将“#handles new connection”替换为:while True:passAll fd应该转到最终的else语句,但只有在它们有数据供我读入之后。所有fd都应该转到最终的else语句,但只有在它们有数据供我读入之后。