关于 Linux 系统上同一个程序的多个进程实例共享一个 TCP 监听端口的说法, 哪个不正确( )

A. 每个进程都使用 SO_REUSEPORT 选项,然后绑定同一个地址和端口
B. 每个进程分别绑定不同的网卡地址的同一端口
C. 第一个进程先绑定到监听地址端口, 然后 fork 子进程共享使用
D. 每个进程分别绑定一次, 但只有最后一个调用的进程才能收到数据

1 1 收藏


直接登录
最新评论
  • fcb_jay   2016/08/31

    B。我觉得。

  • chisheng   2016/09/02

    B和D都有问题吧,B绑定的网卡不同端口相同根本没法共享啊。D 选项我查了下,没设置SO_REUSEPORT情况下应该无法重复绑定的,但是SO_REUSEPORT是内核3.9才支持的,我看了下我的安卓5.1版本内核才3.4,趋势更新知识太快了吧。

    • 王先生 学生 2016/09/02

      应该为D,在没有SO_REUSEPORT 之前都是使用fork来让多个进程监听同一端口

      • chisheng   2016/09/06

        B也明显错误,不同的网卡收到的数据都不一样,怎么共享?D选项本身都有问题,老内核无法实现多次绑定,而且不支持SO_REUSEPORT,新内核支持多次 绑定,由于内核实现了负载均衡,所以每个线程都能收到数据。

  • 小湫哥 华南理工大学计算机研究生院 2016/09/02

    这道题的答案应该是C

    贴上某博主的处理方式

    返回

    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S   500  3019  2370  0  80   0 –  1315 –      tty2     00:00:01 bash
    0 S   500  7332  3019  0  80   0 –   466 –      tty2     00:00:00 multi_proc
    1 S   500  7333  7332  0  80   0 –   466 –      tty2     00:00:00 multi_proc
    1 S   500  7334  7332  0  80   0 –   466 –      tty2     00:00:00 multi_proc
    1 S   500  7335  7332  0  80   0 –   466 –      tty2     00:00:00 multi_proc
    1 S   500  7336  7332  0  80   0 –   466 –      tty2     00:00:00 multi_proc
    1 S   500  7337  7332  0  80   0 –   466 –      tty2     00:00:00 multi_proc
    1 S   500  7338  7332  0  80   0 –   466 –      tty2     00:00:00 multi_proc