1

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

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

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

  3. 以 I/O 方式打开文件描述符os.open(fd)

但我明白了OSError: [Errno 9] Bad file descriptor

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

我找到了一个用 ruby​​ 编写的示例,并对其进行了测试,它可以工作。如何在 Ruby 中的 Unix 上创建持久网络套接字?

谁能帮我把它写进python,我想要实现的是:socket_start.py google.com(他会打印fd号) sleep 10 socket_write.py fd_number 'something' sleep 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 中解决这个问题?

4

2 回答 2

1

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

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

于 2010-09-19T12:17:46.257 回答
0

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

于 2010-09-19T12:19:35.447 回答