请教一下select函数与send函数的问题?

monk_CD 2011-11-28 08:46:42
问题:
当我调用select函数后,发现有一个套接字可写,然后调用send函数发送数据, 发送后,我是否还需要用SELEct函数判断这个套接字能否可写,然后再次调用Send函数发送数据?

情景:
主要是,我在发送文件的时候,主要想实现:当发送文件的时候,send一个消息通知对方有文件来了,对方接受到这个请求,当对方确定接受的时候,返回一个确定接受的消息,然后才开始发送文件!

所以在发送文件的时候,双方要进行确定,所以才会产生上面的问题!

求解释!
...全文
153 10 打赏 收藏 转发到动态 举报
写回复
用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会出现阻塞么?

18,356

社区成员

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

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