C
當兩個程序在同一個 Berkeley/Unix 上監聽時會發生什麼F我__F一世l和file插座?
當我設置兩個程序來監聽同一個Berkeley 套接字時會發生什麼?
消息是否被路由到兩者?兩者都不?兩者之一?如果是這樣,怎麼做?
具體來說,我可以
gunicorn
用相同的路徑啟動兩個程序,--bind unix:
並且不會發生明顯的錯誤:gunicorn --bind=unix:/path/to/some/socket
這似乎是一個非常簡單的問題,儘管我無法在 SE 或其他地方找到明確的答案。
兩個程序不能綁定(和監聽)同一個 unix 套接字。嘗試綁定到已經存在的 unix 套接字的程序會
EADDRINUSE
出錯。具體來說,我可以使用相同的 –bind unix:/ 啟動兩個 gunicorn 程序,並且不會出現明顯的錯誤
很可能您的
gunicorn
程序實際上是在綁定到它之前刪除了套接字文件,因此它最終綁定到了不同的unix 套接字。請記住,unix 套接字的實際地址是
device_id:inode
元組,而不是訪問它的路徑。如果您刪除一個 unix 套接字,綁定到同一路徑的程序最終將創建一個不同的套接字文件,具有不同的 inode。注意:所有這些都適用於“普通”、文件系統駐留的 Unix 套接字。Linux 也有抽象的 unix 套接字,其中套接字的名稱是它的實際地址,並且不使用任何類型的文件系統對象。對於這些,您也無法將兩個套接字綁定到同一個地址。