Unix 域套接字队列详细信息
Unix domain socket queue details
在 UNIX domain socket (AF_UNIX Type & DGRAM) 中,当 reader 速度慢时,没有。排队的数据包是 'max_dgram_qlen' 。有什么方法可以识别队列中占用的字节数(或)没有。在发送方或接收方的队列中有更多字节可用。
或者至少,当队列已满时,写入器被阻塞。有什么方法可以识别作者块事件吗?
提前致谢。
您应该将文件描述符设置为非阻塞,并使用 select
确定当前是否可以写入它。
- 你可以使用ioctl来查找。
检查写入缓冲区是否为空(假设您已经将数据放在那里并想检查它们是否已被消耗):
ioctl(fd, SIOCOUTQ, &pending);
其中 fd 是套接字的文件描述符,pending 变量是将返回数据的剩余大小。
检查读取缓冲区是否为空(假设有人已经将数据放在那里并且您想检查它们是否存在而不消耗它们):
ioctl(fd, SIOCINQ, &pending);
/*note the difference on the second parameter, where we change the flag from SIOCOUTQ to SIOCINQ*/
- 根据 send() 函数返回的错误消息,我们可以确定缓冲区已满 event.By 检查 error==ENOBUFS 您可以确定缓冲区已满。
在 UNIX domain socket (AF_UNIX Type & DGRAM) 中,当 reader 速度慢时,没有。排队的数据包是 'max_dgram_qlen' 。有什么方法可以识别队列中占用的字节数(或)没有。在发送方或接收方的队列中有更多字节可用。 或者至少,当队列已满时,写入器被阻塞。有什么方法可以识别作者块事件吗? 提前致谢。
您应该将文件描述符设置为非阻塞,并使用 select
确定当前是否可以写入它。
- 你可以使用ioctl来查找。
检查写入缓冲区是否为空(假设您已经将数据放在那里并想检查它们是否已被消耗):
ioctl(fd, SIOCOUTQ, &pending);
其中 fd 是套接字的文件描述符,pending 变量是将返回数据的剩余大小。
检查读取缓冲区是否为空(假设有人已经将数据放在那里并且您想检查它们是否存在而不消耗它们):
ioctl(fd, SIOCINQ, &pending);
/*note the difference on the second parameter, where we change the flag from SIOCOUTQ to SIOCINQ*/
- 根据 send() 函数返回的错误消息,我们可以确定缓冲区已满 event.By 检查 error==ENOBUFS 您可以确定缓冲区已满。