社区
网络编程
帖子详情
请教一下select函数与send函数的问题?
monk_CD
2011-11-28 08:46:42
问题:
当我调用select函数后,发现有一个套接字可写,然后调用send函数发送数据, 发送后,我是否还需要用SELEct函数判断这个套接字能否可写,然后再次调用Send函数发送数据?
情景:
主要是,我在发送文件的时候,主要想实现:当发送文件的时候,send一个消息通知对方有文件来了,对方接受到这个请求,当对方
确定接受
的时候,返回一个确定接受的消息,然后才开始发送文件!
所以在发送文件的时候,双方要进行确定,所以才会产生上面的问题!
求解释!
...全文
198
10
打赏
收藏
请教一下select函数与send函数的问题?
问题: 当我调用select函数后,发现有一个套接字可写,然后调用send函数发送数据, 发送后,我是否还需要用SELEct函数判断这个套接字能否可写,然后再次调用Send函数发送数据? 情景: 主要是,我在发送文件的时候,主要想实现:当发送文件的时候,send一个消息通知对方有文件来了,对方接受到这个请求,当对方确定接受的时候,返回一个确定接受的消息,然后才开始发送文件! 所以在发送文件的时候,双方要进行确定,所以才会产生上面的问题! 求解释!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
monk_CD
2011-11-30
打赏
举报
回复
[Quote=引用 9 楼 sinservice 的回复:]
引用 8 楼 qweewqpkn 的回复:
引用 7 楼 sinservice 的回复:
引用 5 楼 smwhotjay 的回复:
send一般不用select.都是可写的.
通量未到极限所致。
你发送1G的文件到远程客户端(当然是循环发送),如果不select(或其他重叠操作),你的用户级线程将实际耗费1G的传送时间,白白浪费了。
怎么个浪费法? ……
[/Quote]
感谢你的耐心帮助!
Eleven
2011-11-29
打赏
举报
回复
这个你需要自己定义应用层协议了
「已注销」
2011-11-29
打赏
举报
回复
1 当你不需要发送数据时,当然就不需要select其可写性。
因为socket大多数时间都是可写的,你又不写还连续不停地判断状态,结果造成无谓的CPU浪费。
2 当select到1个socket可写后,第一次send保证不会阻塞,但接下来继续send就可能会阻塞,这取决于网卡的处理速度,网卡的处理速度肯定要慢于CPU写的速度,所以,不停地发送,肯定可以达到buffer充满的情况,而导致写阻塞。
「已注销」
2011-11-29
打赏
举报
回复
[Quote=引用 8 楼 qweewqpkn 的回复:]
引用 7 楼 sinservice 的回复:
引用 5 楼 smwhotjay 的回复:
send一般不用select.都是可写的.
通量未到极限所致。
你发送1G的文件到远程客户端(当然是循环发送),如果不select(或其他重叠操作),你的用户级线程将实际耗费1G的传送时间,白白浪费了。
怎么个浪费法? 能详细说?
[/Quote]
是IO快还是CPU快? 当然是CPU快。
设想一个实验:
如果你循环阻塞发送一个1G的文件到远程,这个过程需要你的线程耗费多少时间?
至少(略小于)1G网络传输的时间。
这个时候,你的线程就相当于跟IO一样慢了,这就是浪费。
monk_CD
2011-11-29
打赏
举报
回复
[Quote=引用 7 楼 sinservice 的回复:]
引用 5 楼 smwhotjay 的回复:
send一般不用select.都是可写的.
通量未到极限所致。
你发送1G的文件到远程客户端(当然是循环发送),如果不select(或其他重叠操作),你的用户级线程将实际耗费1G的传送时间,白白浪费了。
[/Quote]
怎么个浪费法? 能详细说?
「已注销」
2011-11-29
打赏
举报
回复
[Quote=引用 5 楼 smwhotjay 的回复:]
send一般不用select.都是可写的.
[/Quote]
通量未到极限所致。
你发送1G的文件到远程客户端(当然是循环发送),如果不select(或其他重叠操作),你的用户级线程将实际耗费1G的传送时间,白白浪费了。
monk_CD
2011-11-29
打赏
举报
回复
[Quote=引用 2 楼 yanfeiqin 的回复:]
不会,select只是检测是否可以发送数据,换句话说,如果你不要效率的话,不需要select函数都是可以的。
[/Quote]
肯定要效率啊··
smwhotjay
2011-11-29
打赏
举报
回复
send一般不用select.都是可写的.
六月安宝
2011-11-28
打赏
举报
回复
不会,select只是检测是否可以发送数据,换句话说,如果你不要效率的话,不需要select函数都是可以的。
monk_CD
2011-11-28
打赏
举报
回复
就是调用一次SELECT后,多次调用SEND函数,后面的send会出现阻塞么?
网络编程-
select
模型
将一组socket数组投递给系统,然后在系统里去查询socket是否有信号,过程都是在
select
函数
里面去进行的,再到返回有操作的socket集合
select
()
函数
本质
select
()
函数
执行遍历和返回有响应的socket,整个过程中也是阻塞的。等待时间阻塞不等待执行阻塞半等待执行阻塞+软阻塞全等待执行阻塞+硬阻塞。
winsock
send
和 recv 的
问题
我最近在写一个 Tcp的程序服务端有两个
send
函数
,每次发送两个数据到 Socket1 和 Socket2分别对应的客服端去。...
send
( Socket1, buf, size, 0 );
send
( Socket2, buf, size, 0 );...客户端接收的代码 timeval tm = {0, 0}; ret =
select
(0,&f...
TCP/IP Winsock编程要点
利用Winsock编程由同步和异步方式,同步方式逻辑清晰,编程专注于应用,在抢先式的多任务操作系统中(WinNt、Win2K)采用多线程方式效率基本达到异步方式的水平,应此以下为同步方式编程要点。 1、快速通信 Winsock的Nagle算法将降低小数据报的发送速度,而系统默认是使用Nagle算法,使用 int setsockopt( SOCKET s, int level, int op
linux
select
错误码,linux下面
select
返回115错误
或者你会发现,你在编写程序时,不注意,或者一个很不起眼的写法,可它会给你带来很无奈的错误,让你很久才会发现,原来这个
问题
是这么回事。1、常见的写法
问题
这个
问题
看似不怎么,根据原理
select
会重置参数,所以fd这个参数在调用完
select
之后会被更改,所以下次执行
select
必须重新设置fd,就是说要将 FD_ZERO(&fd); FD_SET( skt, &fd);放在do,wh...
网络编程之
select
为什么要使用
select
模型? 答:解决基本C/S模型中,accept()、recv()、
send
()阻塞的
问题
select
模型与C/S模型的不同点 C/S模型中accept()会阻塞一直傻等socket来链接
select
模型只解决accept()傻等的
问题
,不解决recv(),
send
()执行阻塞
问题
其实
select
模型解决了实现多个客户端链接,与多个客户端分别通信 两个模型都存在recv(),
send
()执行阻塞
问题
由于服务器端,客户端不需要(客户端只有一个socket,可以通过加线程解决同时r
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章