关于套接字缓冲区

时间:2021-08-21 11:08:56
我们知道,对每个套接字,系统都会分配一个发送缓冲区和接收缓冲区,

而且这个缓冲区的长度我们可以设置。

我的问题是,我如何知道:

1)在不调用 recv 的情况下, 当前接收缓冲区中,有多少数据.

2)当前发送缓冲区中还有多少数据


      谢谢

6 个解决方案

#1


从来没听过有获取这个的方法。同问。

#2


1)在不调用 recv 的情况下, 当前接收缓冲区中,有多少数据.

这个应该可以使用MSG_PEEK来获取。例如:
recv(socket_, buf, size, MSG_PEEK);

你可以试一下。

#3


引用 2 楼 program2050 的回复:
1)在不调用 recv 的情况下, 当前接收缓冲区中,有多少数据.

这个应该可以使用MSG_PEEK来获取。例如:
recv(socket_, buf, size, MSG_PEEK);

你可以试一下。

++

#4


如果在recv的时候,flag字段设置了MSG_PEEK,则读取数据包的时候,不会把该数据包从缓存队列中删除;下次读取时还是这个数据包。

#5


1, 标准做法是ioctl(fd, FIONREAD, &nbytes);
2, 标准做法是ioctl(fd, FIONWRITE, &nbytes);

#6


引用 5 楼 qq120848369 的回复:
1, 标准做法是ioctl(fd, FIONREAD, &nbytes);
2, 标准做法是ioctl(fd, FIONWRITE, &nbytes);


学习了。

#1


从来没听过有获取这个的方法。同问。

#2


1)在不调用 recv 的情况下, 当前接收缓冲区中,有多少数据.

这个应该可以使用MSG_PEEK来获取。例如:
recv(socket_, buf, size, MSG_PEEK);

你可以试一下。

#3


引用 2 楼 program2050 的回复:
1)在不调用 recv 的情况下, 当前接收缓冲区中,有多少数据.

这个应该可以使用MSG_PEEK来获取。例如:
recv(socket_, buf, size, MSG_PEEK);

你可以试一下。

++

#4


如果在recv的时候,flag字段设置了MSG_PEEK,则读取数据包的时候,不会把该数据包从缓存队列中删除;下次读取时还是这个数据包。

#5


1, 标准做法是ioctl(fd, FIONREAD, &nbytes);
2, 标准做法是ioctl(fd, FIONWRITE, &nbytes);

#6


引用 5 楼 qq120848369 的回复:
1, 标准做法是ioctl(fd, FIONREAD, &nbytes);
2, 标准做法是ioctl(fd, FIONWRITE, &nbytes);


学习了。