【发布时间】:2011-04-26 00:27:15
【问题描述】:
本地基于消息的套接字能否将消息传输到 SO_SNDBUF/SO_RCVBUF 限制,或者在哪里可以为使用socket(PF_UNIX, SOCK_SEQPACKET, 0) 或socket(PF_UNIX, SOCK_DGRAM, 0) 创建的描述符确定所谓的“固定最大长度”?
【问题讨论】:
本地基于消息的套接字能否将消息传输到 SO_SNDBUF/SO_RCVBUF 限制,或者在哪里可以为使用socket(PF_UNIX, SOCK_SEQPACKET, 0) 或socket(PF_UNIX, SOCK_DGRAM, 0) 创建的描述符确定所谓的“固定最大长度”?
【问题讨论】:
来自man unix
SO_SNDBUF 套接字选项确实对 Unix 域 sock 有影响- ets,但 SO_RCVBUF 选项没有。对于数据报套接字, SO_SNDBUF 值对传出数据的大小施加了上限- 克。此限制计算为双倍(参见 socket(7))选项 value 减去 32 字节用于开销。
【讨论】:
您的数据报将分别在最大 SO_SNDBUF 和 SO_RCVBUF 的套接字发送/接收缓冲区中排队。超过此限制的数据报将被丢弃。
请注意,数据报没有您放入其中的数据的确切大小。
我不记得了,但我认为您可以调整这些设置。不过,在处理 UDP 套接字时进行自己的缓冲总是更明智的做法。
编辑:对此感到抱歉,是的。这可能有用:
SO_SNDBUF 套接字选项确实有 对 Unix 域 sock- 的影响 ets,但 SO_RCVBUF 选项没有。对于数据报 套接字 SO_SNDBUF 值对传出的大小施加了上限 数据- 克。此限制计算为双倍(请参阅 socket(7)) 选项 value 减去 32 字节用于开销
【讨论】: