社区
网络编程
帖子详情
请教一下select函数与send函数的问题?
monk_CD
2011-11-28 08:46:42
问题:
当我调用select函数后,发现有一个套接字可写,然后调用send函数发送数据, 发送后,我是否还需要用SELEct函数判断这个套接字能否可写,然后再次调用Send函数发送数据?
情景:
主要是,我在发送文件的时候,主要想实现:当发送文件的时候,send一个消息通知对方有文件来了,对方接受到这个请求,当对方
确定接受
的时候,返回一个确定接受的消息,然后才开始发送文件!
所以在发送文件的时候,双方要进行确定,所以才会产生上面的问题!
求解释!
...全文
188
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
模型在解决C/S模型中accept()、recv()、
send
()阻塞
问题
的应用,对比了
Select
模型与传统C/S模型的区别,详细阐述了
Select
模型的逻辑与实现方式,包括套接字集合FD_SET的使用及
select
()
函数
的功能。
winsock
send
和 recv 的
问题
本文讨论了一个TCP服务端程序中遇到的
问题
,当服务端连续调用
send
函数
发送数据到两个不同的客户端时,会出现阻塞现象,导致客户端无法接收到数据。作者通过调整
select
函数
的阻塞延迟解决了该
问题
,并探讨了可能的原因。
TCP/IP Winsock编程要点
博客提到采用PING方式时间约2秒左右,重点讲述同步方式中解决recv和
send
阻塞
问题
,采用
select
函数
,在收发前先检查读写可用状态,并给出读的例子。
linux
select
错误码,linux下面
select
返回115错误
本文详细探讨了在编程中使用
select
函数
时可能出现的
问题
,包括参数重置的重要性以及超时时间的精确控制。强调了FD_ZERO和FD_SET应在每次
select
前初始化,以及
select
中timeval参数需每次更新以避免超时计算错误。通过实例分析了如何正确处理
select
的超时计算,确保在多轮
send
操作间准确记录时间。
网络编程之
select
本文详细介绍了网络编程中的
select
模型,解释了为何使用
select
来解决C/S模型中的阻塞
问题
,特别是accept()的阻塞。
select
模型允许服务器处理多个客户端连接,但对recv()和
send
()的阻塞
问题
无能为力。文章还讨论了
select
模型的工作原理,包括fd_set结构体、相关操作宏以及
select
()
函数
的使用。最后,通过代码示例展示了如何在实践中应用
select
模型进行多客户端通信。
网络编程
18,356
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章