社区
网络编程
帖子详情
请教一下select函数与send函数的问题?
monk_CD
2011-11-28 08:46:42
问题:
当我调用select函数后,发现有一个套接字可写,然后调用send函数发送数据, 发送后,我是否还需要用SELEct函数判断这个套接字能否可写,然后再次调用Send函数发送数据?
情景:
主要是,我在发送文件的时候,主要想实现:当发送文件的时候,send一个消息通知对方有文件来了,对方接受到这个请求,当对方
确定接受
的时候,返回一个确定接受的消息,然后才开始发送文件!
所以在发送文件的时候,双方要进行确定,所以才会产生上面的问题!
求解释!
...全文
153
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
函数
详解
select
函数
详解背景说明定义介绍、参数说明原理返回值p
select
总结案例案例1案例2 说明:本文整合网络资源和man帮助文档,请酌情参考。 背景
select
函数
是实现IO多路复用的一种方式。 什么是IO多路复用? 举一个简单...
select
()
函数
返回值及
select
与socket阻塞的关系及
select
函数
的意义
select
的返回值与recv
函数
的返回值十分类似,都分>0,=0,<0三种情况。 >0:有事件发生, FD_ISSET(socket, &fd_read); recv()....... =0:timeout,超时 <0:出错。 在出错的情况下, 这三...
Linux
select
函数
的使用
文章目录一、
select
函数
1.fd_set结构体FD_ZEROFD_SETFD_CLRFD_ISSET2.timeval 结构体3.返回值二、文件描述符就绪条件 一、
select
函数
int
select
( int __nfds, //指定被监听的文件描述符总数 fd_set *__readfds, /...
java
select
函数
_
select
函数
参数及其使用
Select
的
函数
格式(Unix系统下的伯克利socket编程,和windows下的略有区别,体现两个方面:一是
select
函数
的第一个参数,在windows下可以忽略,但在linux下必须设为最大文件描述符加1;二是结构fd_set在两个系统里...
select
()
函数
的作用
可是对于初学SOCKET的人来说都不太爱用
select
()写程序,他们只是习惯写诸如 conncet()、accept()、recv()或recvfrom()这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些
函数
时必须等待某个...
网络编程
18,356
社区成员
64,217
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章