如何得知socket的缓存大小,这个缓存是否有上限,是否会溢出?

neteee_sina 2012-02-17 09:10:11
我有一个客户端的socket接受服务器来的数据,因为这个客户端有大量的占用cpu的任务来执行,以至于有时会堆积接受来的数据而没有处理。

我想知道,这个被缓存起来的socket数据,是
(1) 在系统内存空间还是在用户内存空间?
(2) 缓存大小有限制吗? 如果知道/设置这个限制值
(3) 会不会遇到一个数值以后就溢出,或者操作系统干脆丢掉后续的数据,直到这个socket句柄有缓存可写?
...全文
554 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2012-02-17
  • 打赏
  • 举报
回复
1. SOCKET系统缓冲区
2. SOCKET的接收缓冲区,默认好像是8K,可以通过getsockopt()函数SO_RCVBUF得到,
getsockopt(SOCKET, SOL_SOCKET, SO_RCVBUF, ...);
通过setsockopt设置SO_RCVBUF设置。
setsockopt(SOCKET, SOL_SOCKET, SO_RCVBUF, ...);
3. TCP如果系统缓冲区满,如果没有及时recv接收的话,就不能再发送数据了,send就会失败,UDP的话,如果接收端的SOCKET的系统buffer满了,后面到来的包会被丢掉。
fishion 2012-02-17
  • 打赏
  • 举报
回复
setsockopt,指定SO_RCVBUF设置接收缓冲区大小写。如果数据超过了缓冲区能接收的大小,那系统就不会再接收发过来的数据
smwhotjay 2012-02-17
  • 打赏
  • 举报
回复

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧