我注意到,在Python中編程一個TCP服務器時,當一端或另一端意外停止時,在不同情況下會發生一些錯誤。例如,有時我得到了「管道破損」(errno.EPIPE
),有時「連接中止」(errno.CONNABORTED
或errno.WSAECONNABORTED
)。還有跨操作系統the codes are not the same,但我猜Python的errno
模塊處理。什麼是意味着套接字連接丟失的錯誤代碼?
我搜索了很多關於套接字連接的錯誤代碼的含義列表,但沒有找到我正在尋找的東西。
我有什麼到現在爲止是這樣的:
try:
# write or read operation
except socket.error as e:
if e.errno in (errno.EPIPE, errno.ECONNABORTED, errno.WSAECONNABORTED):
print 'Connection lost with server...'
到現在爲止,一切工作順利,甚至把最後一個之前,我對Windows中的問題,並補充,所以恐怕可能有一些我沒有處理的情況。此外,有時,它只是沒有拋出一個錯誤,並保持閱讀空行(與recv
)和錯誤文件描述符等。
SocketServer
類提供這樣的事嗎?或一般的TCP連接?
謝謝您的鏈接,儘可能多的搜索我從來沒有看到它!我很肯定我在這兩種情況下都遇到了錯誤,但現在我閱讀了教程,我認爲這是因爲我使用了由'SocketServer'類('rfile'和'wfile')提供的緩衝讀取器......也許我會用另一種方法('recv','send',也可以在這個類中使用)。是的,我知道最好讓Python處理線程中的異常,但我認爲回溯看起來不太好,這是項目的一部分,所以我寧願自定義消息。 – jadkik94
在函數正常返回後(在沒有例外的語言中,例如C),必須檢查錯誤代碼並檢查由函數調用引發的異常對象上的errno之間有區別。前者是那種容易出錯的東西,其中有例外語言的負擔試圖緩解程序員的負擔。後者基本上是必不可少的知道*發生了什麼*。在某些情況下,知道與發生的事情不同的東西就足夠了,但在大多數情況下,您實際上需要知道發生了什麼。 –
謝謝你們兩位:)我會讓它失敗,然後忽略它。 – jadkik94