python - python 中轮询套接字的问题

标签 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:
    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,因此您将 os.read pty fd。这不是现在从你的终端上读取的吗?那么输入 return 不会导致它“打印数据”吗?

关于python - python 中轮询套接字的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1375772/

相关文章:

c - 进程 fork 后会发生什么?

python - macOS 上 psutil 的构建轮子失败

python - argparse 中 --default 和 --store_const 的区别

java - 如何通过套接字将带有 Unicode 字符的 Java 字符串发送到 C++,而没有奇怪的字符?

Linux 上的 Java 套接字错误(发送 0xFF,接收到 -3)

c - 分析多进程程序

c++ - 使用 exec/fork 运行外部进程

Python如何使用tensorflow-cpu

python - PySpark : Setting Executors/Cores and Memory Local Machine

c - C 上的 SMTP 服务器