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的