Python持久套接字连接

时间:2010-09-19 12:08:27

标签: python sockets persistence file-descriptor

我是python的新手:)我想创建持久套接字。我试图使用文件描述符来做到这一点。我试过的是:

  1. 打开套接字套接字连接s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  2. 获取文件描述符编号fd = s.fileno()

  3. 以I / O os.open(fd)

  4. 打开文件描述符

    但我得到OSError: [Errno 9] Bad file descriptor

    我说我是python的新手,也许我对实现有误。但我尝试了一个更简单的示例os.close(s.fileno()),我得到了同样的错误OSError: [Errno 9] Bad file descriptor

    我找到了一个用ruby编写的例子,我测试了它,它的工作原理。 How do I make persistent network sockets on Unix in Ruby?

    任何人都可以为我写这个python,我想要实现的是: socket_start.py google.com(将打印fd号码) 睡10 socket_write.py fd_number'something' 睡10 socket_read.py fd_number 1024

    我希望你明白我想做什么。谢谢你的建议!


    在您的回复后,我尝试了下一个代码:

    1

    #!/usr/bin/python
    
    import socket
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('google.com', 80))
    s.send('GET /\n')
    print s.fileno()
    

    2

    #!/usr/bin/python
    
    import os
    import sys
    
    fd = int(sys.argv[1])
    os.read(fd, 1024)
    

    错误为OSError: [Errno 9] Bad file descriptor

    我确定问题是什么(我是一名php开发人员)。我认为与php相同,python在关闭脚本后删除垃圾。如何在python中解决这个问题?

2 个答案:

答案 0 :(得分:1)

您使用os.fdopen()打开文件描述符。

我真的很惊讶你已经走得那么远,因为os.open需要一个文件名标志,说明打开文件的模式,例如fd = os.open('foo.txt', os.O_RONLY)。正如我的示例所示,返回文件描述符而不是接受文件描述符。

答案 1 :(得分:0)

如果要通过命令行(即套接字)上收到的参数重新创建套接字,请使用socket.fromfd