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

han*_*ari 4 sockets linux network-programming

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

  1. 接收缓冲区中准备读取的字节数。
  2. 套接字发送缓冲区中尚未发送的字节数。

可以使用 ioctl() 函数的 FIONREAD 选项获取接收缓冲区(第一个属性)。但是对于第二个属性(发送缓冲区中的字节数),我不确定如何读取它。我已经尝试过getsockopt() 函数中的SO_SNDBUF 选项,但结果是发送缓冲区的最大大小而不是发送缓冲区中的当前数据大小。

有什么想法或建议吗?

han*_*ari 7

下面是获取方式,

  1. Receive Buffer中尚未读取的数据长度:

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

    ioctl( socket_descriptor, TIOCOUTQ, &size );  // alternative 1
    ioctl( socket_descriptor, SIOCOUTQ, &size );  // alternative 2
    
    Run Code Online (Sandbox Code Playgroud)

参考:http : //linux.die.net/man/7/tcp