是否可以用同一(ip, port)去連不同的服務?

答案是:可以,但需要reuseaddr!


測試結果:

在linux虛擬機上,指定用同一個端口,通過TCP依次去connect兩個不同的服務S1和S2,

如果希望兩次connect操作都成功,那么兩次connect操作都必須設置reuseaddr選項為true,

否則,只有第一次連接會成功,第二次連接則報eaddrinuse的錯誤。

注: 至于S1和S2是否設置了reuseaddr選項,不影響測試結果。


測試過程(兩次都成功的情況):

在linux虛擬機上,打開erlang shell,然后執(zhí)行:

25> gen_tcp:connect("100.84.35.75", 2815, [binary, {packet, 0}, {port, 7902}, {reuseaddr, true}], 60000).

{ok,#Port<0.580>}

26> gen_tcp:connect("100.84.35.75", 2816, [binary, {packet, 0}, {port, 7902}, {reuseaddr, true}], 60000).

{ok,#Port<0.581>}


然后在linux shell中,查看連接情況:

[nemo@localhost ~]$ netstat -antp | grep 7902

(Not all processes could be identified, non-owned process info

will not be shown, you would have to be root to see it all.)

tcp? ? ? ? 0? ? ? 0 192.168.166.12:7902? ? ? ? 100.84.35.75:2815? ? ? ? ? ESTABLISHED 5323/beam.smp

tcp? ? ? ? 0? ? ? 0 192.168.166.12:7902? ? ? ? 100.84.35.75:2816? ? ? ? ? ESTABLISHED 5323/beam.smp

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容