Unix域套接字队列详细信息

时间:2016-10-18 06:36:50

标签: sockets unix unix-socket

在UNIX域套接字(AF_UNIX Type& DGRAM)中,当读取器缓慢时,no。排队的数据包是“ max_dgram_qlen ”。有没有办法识别占用排队(或)否的字节。发送方或接收方的队列中有更多字节空闲。 或者至少,当队列已满时,编写器被阻止。有没有办法识别编写器阻止事件? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您应该将文件描述符设置为非阻塞,并使用select确定是否可以在当前时间写入它。

答案 1 :(得分:0)

  1. 您可以使用ioctl查找。
  2. 检查写缓冲区是否为空(假设您已将数据放入其中并想要检查它们是否已被使用):

    ioctl(fd, SIOCOUTQ, &pending);
    

    其中fd是套接字的文件描述符,等待变量,将返回剩余的数据大小。

    要检查读缓冲区是否为空(假设有人已将数据放在那里,并且您想要检查它们是否存在而没有使用它们):

    ioctl(fd, SIOCINQ, &pending);
    /*note the difference on the second parameter, where we change the flag from SIOCOUTQ to SIOCINQ*/
    
    1. 根据send()函数返回的错误消息,我们可以识别缓冲区满事件。通过检查错误== ENOBUFS ,您可以识别缓冲区已满。