2012-06-08 85 views
1

當我嘗試強制斷開用戶與我的自定義Python服務器的連接時,出現了崩潰錯誤。 我正在使用asyncore和asynchat類。Python,asyncore,asynchat,Python 2.7.3上的錯誤Mac只有錯誤的文件描述符

但是,當我想強制斷線這樣

asynchat.async_chat.close (self) 

我得到這個錯誤:

asyncore.loop() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/asyncore.py", line 216, in loop 
    poll_fun(timeout, map) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/asyncore.py", line 145, in poll 
    r, w, e = select.select(r, w, e, timeout) 
select.error: (9, 'Bad file descriptor') 

但僅限於Python的Mac上。在Windows上沒有問題...

在asyncore.py類的代碼源中有一個執行選項。但服務器崩潰了。

try: 
     r, w, e = select.select(r, w, e, timeout) 
    except select.error, err: 
     if err.args[0] != EINTR: 
      raise 
     else: 
      return 

太奇怪了......

回答

1

我剛剛發現在谷歌線程:http://bytes.com/topic/python/answers/589612-asyncore-select-statement-problem

這個問題發生在只有OS X。

修改/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/asyncore.py並設置use_pollFalse的默認True

行207:

def loop(timeout=30.0, use_poll=False, map=None, count=None): 

def loop(timeout=30.0, use_poll=True, map=None, count=None):