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

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


测试结果:

在linux虚拟机上,指定用同一个端口,通过TCP依次去connect两个不同的服务S1和S2,

如果希望两次connect操作都成功,那么两次connect操作都必须设置reuseaddr选项为true,

否则,只有第一次连接会成功,第二次连接则报eaddrinuse的错误。

注: 至于S1和S2是否设置了reuseaddr选项,不影响测试结果。


测试过程(两次都成功的情况):

在linux虚拟机上,打开erlang shell,然后执行:

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

你可能感兴趣的:(是否可以用同一(ip, port)去连不同的服务?)