答案是:可以阻课,但需要reuseaddr叫挟!
測試結(jié)果:
在linux虛擬機(jī)上,指定用同一個(gè)端口限煞,通過TCP依次去connect兩個(gè)不同的服務(wù)S1和S2抹恳,
如果希望兩次connect操作都成功,那么兩次connect操作都必須設(shè)置reuseaddr選項(xiàng)為true署驻,
否則奋献,只有第一次連接會成功,第二次連接則報(bào)eaddrinuse的錯(cuò)誤旺上。
注: 至于S1和S2是否設(shè)置了reuseaddr選項(xiàng)瓶蚂,不影響測試結(jié)果。
測試過程(兩次都成功的情況):
在linux虛擬機(jī)上宣吱,打開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