2011-07-22 48 views
0

我正在寫一個ad-hoc代理,它接受來自fifo文件的命令,然後使用python套接字和select.poll託管任意代理連接。我的問題是非常頻繁的,當調用socket.bind ..我得到一個「錯誤的文件描述符」錯誤,或者「在非套接字上的套接字操作」,我不知道爲什麼?下面是代碼片段:Python套接字代理示例,不斷收到錯誤調用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','本地主機'......都做同樣的事情。

我也評論了REUSEADDR部分。但並沒有區別要麼:(

BTW使用.. Arch Linux的

回答

0

嗯....如果我宣佈push_sock varaible pull_sock.connect位,只是綁定之前,它不再發生? !這幾乎就像Python中存在一個錯誤,它讓兩個套接字感到困惑?

雖然似乎現在正在做夢!

相關問題