【💊 Python的解憂錦囊】OSError: [Errno 99] error while attempting t

2024/01/02閱讀時間約 2 分鐘
raw-image



這個問題發生在我們開發Python的Websocket Server時, 使用以下的程式碼架設服務

start_server = websockets.serve(server, 'localhost', args.port)
async with start_server:
await asyncio.Future()

啟動服務後立馬報錯以下的訊息:

OSError: [Errno 99] error while attempting to bind on address ('::1', 10240, 0, 0): cannot assign requested address

這可能的原因是我們的系統可能會對ipv6地址的綁定存在一些限制, 使用localhost時會優先嘗試ipv6位址(::1), 因此導致綁定錯誤, 而我們也可以查看一下/etc/hosts

127.0.0.1       localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.224.2 fcbbffe22464

我們可以看到重點在這 👇

::1     localhost ip6-localhost ip6-loopback

照理來說 ::1 只會對應到ipv6…才對呀, 這主要是我們於Docker容器環境下運行時發生這種狀況, 因而導致綁定錯誤。

既然系統環境已然無法改變, 而我們也不想再去追究Docker環境面問題了, 此時我們還可以改個思路, 將localhost替換成ipv4的「127.0.0.1」或「0.0.0.0」即可。

start_server = websockets.serve(server, '127.0.0.1', args.port)

如此一來便能夠順利運行, 大功告成。

結語

原來開發程式不僅只是專注於程式碼而已, 而是需要連同網路、硬體…等外部相關因素一同掌握, 才能夠在發生問題時快速的進行解決,因此我們不能止步於此, 必須不斷的學習。

91會員
260內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!