2011-07-22 15 views
0

私はfifoファイルからコマンドを受け取り、python socketとselect.pollを使って任意のプロキシ接続をホストするアドホックプロキシを作成しています。私の問題は、socket.bindを呼び出すときに非常に頻繁に起こります。 "Bad file descriptor"エラー、または "Non-socketでのソケット操作"などの理由がわかりません。ここでは、コードの抜粋です: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'、 'localhost' ...すべて同じことを試しました。

また、REUSEADDRの部分もコメントしました。私は後pull_sock.connectビットをpush_sockのvaraible を宣言し、ちょうどバインドする前ならばそれがいずれかの差が行われていない:(

をところで...アーチのLinux

答えて

0

を使用してうーん......、それはもはや起こりませんか? 2つのソケットが混乱しているPythonのバグがあるのとほぼ同じですか?

今は夢を見ているようです!

関連する問題