Linux套接字,如何获取发送缓冲区中的字节数/包数?

时间:2016-07-13 18:31:19

标签: linux sockets network-programming

我正在使用Linux下的简单网络应用程序,我需要阅读以下两个属性:

  1. 接收缓冲区中可以读取的字节数。
  2. 套接字发送缓冲区中尚未发送的字节数。
  3. 可以使用ioctl()函数的FIONREAD选项获取接收缓冲区(第一个属性)。但是对于第二个属性(发送缓冲区中的字节数),我不知道如何阅读。我在getsockopt()函数中尝试过SO_SNDBUF选项,但结果是发送缓冲区的最大大小而不是发送缓冲区中当前的数据大小。

    有任何想法或建议吗?

1 个答案:

答案 0 :(得分:4)

以下是如何获取,

  1. 接收缓冲区中尚未读取的数据长度:

    ioctl( socket_descriptor, FIONREAD, &size );  // alternative 1
    ioctl( socket_descriptor, SIOCINQ, &size );   // alternative 2
    
  2. 发送缓冲区中尚未耗尽的数据长度(未发送或发送但未被接收方确认):

    ioctl( socket_descriptor, TIOCOUTQ, &size );  // alternative 1
    ioctl( socket_descriptor, SIOCOUTQ, &size );  // alternative 2
    
  3. 参考:http://linux.die.net/man/7/tcp