文档说发送:
当消息无法放入套接字的发送缓冲区时,send() 通常会阻塞,除非套接字已置于非阻塞 I/O 模式。在非阻塞模式下,在这种情况下它将返回 EAGAIN。select(2) 调用可用于确定何时可以发送更多数据。
我处于阻塞模式,正在执行以下操作:
buf = malloc(size);
send (socket, buf, size);
free(buf)
Run Code Online (Sandbox Code Playgroud)
假设但非常大,大于缓冲区一次可以容纳的大小(因此它需要以两个块的形式进入缓冲区)。无论如何,在发送后我所处的阻塞模式下,数据被完全复制或处理并因此可删除,我可以放心吗?
在阻塞模式下,send将阻塞直到 I/O 完成或触发错误。您应该检查返回的值,因为send操作不能保证发送的字节数与作为第三个参数传递的字节数相同。
只有当send返回的值等于发送的缓冲区的大小时,您才能确定整个块已被复制到内核内存中,或通过设备内存,或发送到目的地。
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |