c - UDS 套接字上的 send() 返回而不发送整个数据。为什么?

标签 c sockets unix-socket

我正在开发运行 Linux 的嵌入式设备。在我的应用程序中,服务器线程打开 UDS 套接字并等待连接。当客户端(不同的应用程序/进程)连接时,它会处理请求并发送请求的数据。

请求的数据通常大于52KB。然而,send() 调用在仅发送 32064 字节后返回。这种行为是间歇性出现的;通常整个 52KB 或更多都毫无问题地发送到客户端进程。

有人可以建议 send() 在传输过程中返回的可能原因是什么吗?

我没有客户端代码,只有服务器代码,但不允许我在这里发布。据我所知,我没有看到服务器代码曾经关闭过所述套接字。它仅在整个应用程序关闭时关闭。

有没有一种方法可以在客户端或服务器不显式关闭套接字连接的情况下结束套接字连接?由于我没有客户端代码,我正在寻找服务器代码是否在做一些愚蠢的事情的可能性。

感谢对此的任何意见。

谢谢!

最佳答案

成功时 send() 返回发送的字节数,这不能保证您的所有数据都已写入,您需要用剩余数据再次调用它,此行为取决于内部缓冲区大小。 read() 函数的行为相同。

“send() 和 write(2) 之间的唯一区别是标志的存在。使用零标志参数,send() 等同于 write(2)。” 来源:man 2 发送

“写入的字节数可能少于计数,例如,底层物理介质上空间不足,或遇到 RLIMIT_FSIZE 资源限制(请参阅 setrlimit(2)),或调用在写入少于 count 个字节后被信号处理程序中断。(另请参阅 pipe(7)。)” 来源:man 2 write

关于c - UDS 套接字上的 send() 返回而不发送整个数据。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55009595/

相关文章:

c - 在确定数组大小时,括号是否有所不同?

c++ - 接收 recv 数据直到流结束(使用 HTTP)?

c - 使用 gethostbyname() 查找 IP

c++ - boost::asio::tcp 套接字上的双向通信

php - socket_read()中$type参数的含义

python - 如何检测服务器正在关闭UNIX域套接字?

c++ - 函数返回的字符串文字的生命周期

c - C 中全局指针与局部指针的动态内存分配

c - C:有人知道“C谜”代码是如何工作的吗?

Python 套接字 : binding to '' vs socket. gethostname()