社区
Linux/Unix社区
帖子详情
为什么多线程下recv不阻塞?
broadury
2005-10-03 01:09:31
现在在做一个代理服务器,需要用到多线程。
一个线程一直在接收数据,另一个一直发送。
但是当接收进程将数据接收完毕之后,继续recv,这时候按我想的话,线程应该阻塞在这里,但是结果是一直收到长度为0的数据,并没有阻塞(抓包看出其实并没有数据进来)。
所以导致CPU占用率很高
大家有没有什么好的主意?伤脑筋啊!
...全文
292
3
打赏
收藏
为什么多线程下recv不阻塞?
现在在做一个代理服务器,需要用到多线程。 一个线程一直在接收数据,另一个一直发送。 但是当接收进程将数据接收完毕之后,继续recv,这时候按我想的话,线程应该阻塞在这里,但是结果是一直收到长度为0的数据,并没有阻塞(抓包看出其实并没有数据进来)。 所以导致CPU占用率很高 大家有没有什么好的主意?伤脑筋啊!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
darkstar21cn
2005-10-04
打赏
举报
回复
每次接收为0时,说明没有数据,线程就应该进入休眠。usleep(纳秒)
daemeon
2005-10-03
打赏
举报
回复
非阻塞的方式, recv的返回值应该是-1, errno是EAGAIN.
tb01412
2005-10-03
打赏
举报
回复
那不是多线程的问题,而是你有可能以非阻塞的方式来处理的,你可以试一下单线程来读数据,看是不是也不阻塞?
Boost网络编程,
recv
,read_some,第二次无法读取,数据不完整
boost asio socket
recv
read_some 第二次无法读取, tpc/ip ,包不完整,C++网络编程简单的客服端服务端
linux
多线程
recv
安全吗,在
多线程
环境中
recv
()不会被信号中断
我有一个处于
阻塞
recv
()循环中的线程,我想终止(假设不能将其更改为select()其他任何异步方法)。我也有一个捕获的信号处理程序,SIGINT理论上它应该
recv
()返回错误并errno设置为EINTR。但是事实并非如此,我认为这与应用程序是
多线程
的事实有关。还有另一个线程,正在等待pthread_join()呼叫。这里发生了什么事?编辑:好的,现在我将信号从主线程显式传递给所有
阻塞
recv
...
linux c++ socket 网络编程(1)同步
阻塞
、非
阻塞
模型
1.网络编程基本模型介绍 linux的网络编程有很多种写法,最简单的是
阻塞
式(Blocking)的网络程序,其次有非
阻塞
(Non-Blocking),多路复用(Multiplexing),异步(Asynchronous)模型等。 1.1.
阻塞
模型
阻塞
模型是最为简单的一种网络编程模型。顾名思义,该模型中,socket都工作在
阻塞
模式下,在调用相应的网络函数时,如accept,
recv
socket 网络编程
recv
()函数错误
LINux下网络编程,采用非
阻塞
模式,调用
recv
函数,系统出错代码:Resource temporarily unavailable。由此查资料: 1、
阻塞
模式和非
阻塞
模式的区别
阻塞
模式没有消息,服务器是
多线程
的,客户机为了不影响性能,也要编成
多线程
的。 非
阻塞
模式有消息通知你读写、连接等,但服务器是单线程的
socket关闭之close()和shutdown()的差异
对于一个tcp连接,在c语言里一般有2种方法可以将其关闭:close(sock_fd); // 或者 shutdown(sock_fd, ...);123多数情况下这2个方法的效果没有区别,可以互换使用。除了:close() 是针对file的操作shutdown() 是针对socket的操作unix系统里socket是一个文件,但文件不一定是一个socket;所以在进入系统调用后和达到协议层前(发...
Linux/Unix社区
23,224
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章