2015年8月23日

Tornado 教學 (8) - Resolve [Errno 97] Address family not supported by protocol

在建立 Tornado Web Application 時遇到許多問題,其中一個就是 [Errno 97] Address family not supported by protocol,為了解決這個問題,看了不少網路上的討論最後得以解決。因此,本篇將解決的方式記錄下來提供大家參考。另外,我的 Application 是運行在 Arch Linux 上。( 其他 Tornado 相關教學可以參考本篇整理 )



解決方式:
因不同的作業系統似乎有不同的解決方式,我將我實驗的過程介紹一下,首先從 Google 搜尋結果中可以看到 stackoverflow 上面有人提到與 IP 位址有關係,可以在 listen( ) 時指定 IP 位址解決這個問題,方法如下:
application.listen(8080, '0.0.0.0')
但這個方式仍然不能解決我的問題,因此我將所有程式從 Arch Linux 上複製至 Mac 上測試,竟沒有發生類似的問題。推測是 Arch Linux 上設定的問題,回頭再看錯誤訊息恍然大悟,訊息已經很明顯告知目前的 Protocol 並未支援某種 IP Address 格式。

因此,索性打開 /boot/cmdline.txt 發現目前的設定為 ipv6.disable=1,代表關閉對 IPv6 的支援。隨後,我將這個設定從 cmdline.txt 移除並重新啟動,接著測試並未再發生 [Errno 97] Address family not supported by protocol 的問題了。你可以用以下指令檢查 IPv6 是否開啟:
ifconfig

# 若開啟,你目前使用的網卡會有類似的資訊
...
inet6 xxxx::xxxx:2ff:xxxx:xxxx  prefixlen 64 scopeid 0x20<link>
...


Environment :
  ・ Arch Linux
  ・ Python 2.7

Reference :
  ・ Tornado