【问题标题】:SO_REUSEPORT on macOS with libuv带有 libuv 的 macOS 上的 SO_REUSEPORT
【发布时间】:2016-12-20 17:13:10
【问题描述】:

SO_REUSEPORT 选项不适用于带有 libuv 的 macOS。

uv_loop_init

uv_tcp_init_ex

uv_fileno // 获取文件

int option_value = 1; setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &option_value, sizeof (int)

uv_tcp_bind

uv_thread_create 4

我在 0.0.0.0:8080 看到 4 个相同的地址和端口绑定,但只有 thread1 的 connection_cb 有效,所以我可以在我的程序中使用此选项吗?谢谢。

【问题讨论】:

    标签: macos networking macros freebsd libuv


    【解决方案1】:

    macOS(和其他 BSD)的 SO_REUSEPORT 实现与 Linux 不同。在(相对)最近的 Linux 版本上,它允许您进行内核级负载平衡,但在 BSD 上,只有最后一个要绑定的套接字才能获得连接。

    长话短说,唉,它无法正常工作。

    【讨论】:

    • 注意:我认为 FreeBSD 12.0+ 具有与 Linux 语义相匹配的 SO_REUSEPORT_LB。
    • 不错!感谢您的提醒!
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 2019-01-30
    • 1970-01-01
    • 2017-04-06
    • 2019-05-18
    • 2021-03-02
    • 2020-02-14
    • 1970-01-01
    相关资源
    最近更新 更多