j0s*_*0s3 3 c socket unix-sockets
我正在开发一个广泛使用套接字的 C 应用程序。
我的疑问是:我创建的每个套接字是否都有自己的缓冲区来发送和/或从其他套接字接收消息?
换句话说,套接字是否会受到错误消息交换的影响?
我所说的错误是指发送到一个套接字的消息可以“泄漏”到另一个套接字,而无需编写(并且可能是错误的)程序代码将消息从“预期”接收器显式传输到另一个套接字。
我创建的每个套接字是否都有自己的缓冲区来发送和/或从其他套接字接收消息?
是的。
否则,套接字 API 基本上无法使用,这正是您所建议的原因。
只是为了澄清,因为您没有指定您使用的套接字类型:
每个 TCP/流套接字都有自己独特的发送和接收缓冲区。
这些缓冲区对于在后台处理重新发送、确认管理、重组等是必需的。
每个 UDP/数据报套接字都有自己的接收缓冲区,但不一定有唯一且持久的发送缓冲区。
它没有任何需要持久发送缓冲区的重传逻辑。
asocketpair
可以在两个套接字之间共享一个缓冲区(或在每个方向上共享一个缓冲区)
为了进行比较,a pipe
(与套接字不同)通常只有一个在两个文件描述符之间共享的缓冲区,因为它是单向的。