美文网首页
是否可以用同一(ip, port)去连不同的服务?

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

作者: kamfon | 来源:发表于2016-10-11 21:22 被阅读0次

    答案是:可以,但需要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)去连不同的服务?

          本文链接:https://www.haomeiwen.com/subject/gibbyttx.html