当发送(或写入)缓冲区将满时,让我说,只有 500 字节的空间。如果我有一个非阻塞 fd,然后做
n = send(fd, buf, 1000,0)
在这里我会得到 n<0,我会得到 EWOULDBLOCK 或 EAGAIN 错误。我的问题是:
1 这里,将send
500 字节写入发送缓冲区还是将 0 字节写入发送缓冲区?
2 如果 500 字节被发送到缓冲区并且如果 fd 是 UDP 套接字,那么数据报被分成 2 部分?
3 我需要使用fd
发送许多数据报,如果这次发送缓冲区已满(如果有 EWOULDBLOCK 或 EAGAIN 错误),我需要制作一个待处理的数据报列表(一个 FIFO 队列)。每次我想发送一些数据报时,我都必须检查待处理列表以查看它是否为空。如果不为空,则先发送待处理列表中的数据报。在我看来,这种设计有点麻烦。并且该设计类似于通过用户空间挂起列表扩展内核(顺便说一句,它在内核中吗?)发送缓冲区。有没有更好的解决方案?
谢谢!