私は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