Python套接字代理示例,调用bind()时不断出错..为什么?

标签 python linux sockets proxy network-programming

我正在编写一个临时代理,它从 fifo 文件获取命令,然后使用 python socket 和 select.poll 托管任意代理连接。我的问题是,在调用 socket.bind 时,非常频繁地出现“错误文件描述符”错误,或“非套接字上的套接字操作”错误,我不确定为什么?这是代码片段:

pull_sock=socket.socket()
push_sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
pull_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
push_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
clients={}
# start pull connection
try:
    print "connecting to:", saddr, sport
    pull_sock.connect((saddr,sport))
    except Exception, e:
        print "unable to connect:", repr(e)
        self._threadsafe_remove_dport(dport)
        return
    # start push server connection
    try:
        sleep(1)
        push_sock.bind(('',dport))
        push_sock.listen(1)
        print "host new proxy on %d to %s:%d" % (dport, saddr, sport)
        print "pushfd=",push_sock.fileno(),"pullfd=",pull_sock.fileno()
        # register sockets for async polling
        sockpoll = select.poll()
        sockpoll.register(push_sock, select.POLLIN | select.POLLOUT)
        sockpoll.register(pull_sock, select.POLLIN)

总是失败的是bind()命令,没有别的。我尝试过“”(所有网卡)、“127.0.0.1”、“localhost”...都做了同样的事情。

我还注释掉了REUSEADDR部分。但这也没有什么区别:(

顺便说一句..使用 Arch Linux

最佳答案

嗯....如果我在pull_sock.connect之后声明push_sock变量并且就在绑定(bind)之前,它就不再发生了?!这几乎就像 Python 中存在一个错误,导致两个套接字混淆?

现在似乎实现了梦想!

关于Python套接字代理示例,调用bind()时不断出错..为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6787866/

相关文章:

python - 套接字错误 : [Errno 111] Connection refused on Ubuntu

python - 在 BeautifulSoup 中打印和格式化结果

python - Matlab中的长度函数到python

linux - SSH 远程服务器 - 在终端输出中仅显示 "echo"

ruby-on-rails - 如何在 Windows 10 的 linux 子系统上安装 Ngrok 2.0

linux - 如何解释 x86-64 上的段寄存器访问?

python:调用 socket.recvfrom() 两次

python - Python中将字符串转换为全小写以去除所有非ASCII字母字符的最有效方法是什么?

java - ObjectInputStream 异常

c - 在 Linux 上用 C 将文件从服务器发送到客户端