【问题标题】:What determines maximum local datagram size? (PF_UNIX / SOCK_DGRAM)什么决定了最大本地数据报大小? (PF_UNIX / SOCK_DGRAM)
【发布时间】:2011-04-26 00:27:15
【问题描述】:

本地基于消息的套接字能否将消息传输到 SO_SNDBUF/SO_RCVBUF 限制,或者在哪里可以为使用socket(PF_UNIX, SOCK_SEQPACKET, 0)socket(PF_UNIX, SOCK_DGRAM, 0) 创建的描述符确定所谓的“固定最大长度”?

【问题讨论】:

    标签: c linux sockets posix


    【解决方案1】:

    来自man unix

    SO_SNDBUF 套接字选项确实对 Unix 域 sock 有影响- ets,但 SO_RCVBUF 选项没有。对于数据报套接字, SO_SNDBUF 值对传出数据的大小施加了上限- 克。此限制计算为双倍(参见 socket(7))选项 value 减去 32 字节用于开销。

    【讨论】:

    • 这就是我要找的,谢谢!我的基于 RHEL4 的盒子在 'unix'、'un.h' 或任何与套接字相关的手册页中都没有任何内容(所有日期均为 02 年末/03 年初),所以我放弃了查找过早地。
    【解决方案2】:

    您的数据报将分别在最大 SO_SNDBUF 和 SO_RCVBUF 的套接字发送/接收缓冲区中排队。超过此限制的数据报将被丢弃

    请注意,数据报没有您放入其中的数据的确切大小。

    我不记得了,但我认为您可以调整这些设置。不过,在处理 UDP 套接字时进行自己的缓冲总是更明智的做法。

    编辑:对此感到抱歉,是的。这可能有用:

    SO_SNDBUF 套接字选项确实有 对 Unix 域 sock- 的影响 ets,但 SO_RCVBUF 选项没有。对于数据报 套接字 SO_SNDBUF 值对传出的大小施加了上限 数据- 克。此限制计算为双倍(请参阅 socket(7)) 选项 value 减去 32 字节用于开销

    【讨论】:

    • 这些不是 UDP 套接字。 PF_UNIX (AF_UNIX) 而不是 PF_INET 或 PF_INET6 (AF_INET 或 AF_INET6)
    猜你喜欢
    • 2020-03-06
    • 2014-04-26
    • 2016-02-16
    • 2011-10-26
    • 2017-06-06
    • 1970-01-01
    • 2022-11-24
    • 2019-12-24
    相关资源
    最近更新 更多