为什么多线程下recv不阻塞?

broadury 2005-10-03 01:09:31
现在在做一个代理服务器,需要用到多线程。
一个线程一直在接收数据,另一个一直发送。
但是当接收进程将数据接收完毕之后,继续recv,这时候按我想的话,线程应该阻塞在这里,但是结果是一直收到长度为0的数据,并没有阻塞(抓包看出其实并没有数据进来)。
所以导致CPU占用率很高
大家有没有什么好的主意?伤脑筋啊!
...全文
196 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkstar21cn 2005-10-04
  • 打赏
  • 举报
回复
每次接收为0时,说明没有数据,线程就应该进入休眠。usleep(纳秒)
daemeon 2005-10-03
  • 打赏
  • 举报
回复
非阻塞的方式, recv的返回值应该是-1, errno是EAGAIN.
tb01412 2005-10-03
  • 打赏
  • 举报
回复
那不是多线程的问题,而是你有可能以非阻塞的方式来处理的,你可以试一下单线程来读数据,看是不是也不阻塞?

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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