社区
网络编程
帖子详情
如何将Send()设置为非阻塞模式?
wanmoxiaosheng
2007-06-21 09:31:53
刚开始学网络编程,采用阻塞模式向服务器发送数据,结果发送一段时间以后发生阻塞,成为处理瓶颈。如何解决这个问题?听说非阻塞模式可以解决,那么如何将Send()设置为非阻塞模式呢?
感谢你的关注。
...全文
1224
17
打赏
收藏
如何将Send()设置为非阻塞模式?
刚开始学网络编程,采用阻塞模式向服务器发送数据,结果发送一段时间以后发生阻塞,成为处理瓶颈。如何解决这个问题?听说非阻塞模式可以解决,那么如何将Send()设置为非阻塞模式呢? 感谢你的关注。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wynney
2007-07-24
打赏
举报
回复
/*设置发送超时6秒*/
int TimeOut = 6000;
if( ::setsockopt(uSock,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut)) == SOCKET_ERROR )
{
WSACleanup( );
}
/*设置接收超时11秒*/
TimeOut = 11000;
if( ::setsockopt(uSock,SOL_SOCKET,SO_RCVTIMEO,(char*)&TimeOut,sizeof(TimeOut)) == SOCKET_ERROR )
{
WSACleanup( );
}
wanmoxiaosheng
2007-07-24
打赏
举报
回复
感谢各位的热心答复,等我把这个问题弄清除了再给大家得分.
wanmoxiaosheng
2007-07-24
打赏
举报
回复
感谢Big_Stone,我的邮箱地址为wanmoxiaosheng@gmail.com.
Big_Stone
2007-07-03
打赏
举报
回复
还可以用重叠I/O进行处理
Big_Stone
2007-07-03
打赏
举报
回复
u_long ul = 1L;
nRet = ioctlsocket(m_sockDesc, FIONBIO, (u_long FAR *)&ul);
if(SOCKET_ERROR == nRet)
------------------------------------------------------------
就是这样的,留下个EMAIL,我给你个完整的例子
yuyizhi
2007-07-03
打赏
举报
回复
改成非阻塞unsigned long int flag=1;
result=ioctlsocket(client,FIONBIO,&flag);
然后send()
再//set back to block mode咯
flag=0;
result=ioctlsocket(client,FIONBIO,&flag);
或设定超时setsockopt(client,SOL_SOCKET,SO_SNDTIMEO,(const char *)&sendtimeout,sizeof(sendtimeout)然后closesocket()?
redex
2007-07-03
打赏
举报
回复
Avoid(千金散去还复来), glunoy():
send确实会阻塞, 测试方案如下:
一个阻塞式客户端, 连一个阻塞式服务器, 服务器向客户端发大量数据,
但客户端模拟读数据非常慢的情况(读一次休息几秒钟), 当服务器端发送
缓冲区满时, 注意!!! send不出错,不返回,阻塞了!
"send不会阻塞" 这种说法太普遍了, 但好象实际动手测试的人很少啊...
WizardK
2007-07-02
打赏
举报
回复
你说的是RECV吧
xiaodongdehome
2007-07-02
打赏
举报
回复
按 2楼的, 把 socket 设置成 异步模式 没错!
WindRand
2007-07-02
打赏
举报
回复
你应该是把套接字设置为非阻塞模式,用ioctlsocket来完成。
aj3423
2007-07-01
打赏
举报
回复
“send会阻塞?
没听说过。。。”
我也觉得这样,send发送完了不就自动执行下面的代码了吗
hdqqq
2007-07-01
打赏
举报
回复
用WSASend,然后可以通过事件等待或者用完成端口处理.
glunoy
2007-07-01
打赏
举报
回复
send 是把东西放到系统的发送缓冲区并立即返回,不会引起所谓的阻塞。只有在缓冲区已满时返回一个异常。
Avoid
2007-06-30
打赏
举报
回复
send会阻塞?
没听说过。。。
wanmoxiaosheng
2007-06-30
打赏
举报
回复
有完整地例子吗?
ouyh12345
2007-06-21
打赏
举报
回复
好象不能光把send设为非阻塞。
u_long ul = 1L;
nRet = ioctlsocket(m_sockDesc, FIONBIO, (u_long FAR *)&ul);
if(SOCKET_ERROR == nRet)
{
sprintf( m_pszError, "Winsock error : %s (Error Code %d)\n", "Nonblocking socket call error", WSAGetLastError());
return FALSE;
}
ul为0时为阻塞,不为0时为非阻塞
wanmoxiaosheng
2007-06-21
打赏
举报
回复
补充一点,我使用的是Win32 API函数。
【2021】UI自动化测试框架(Selenium3)
适合人群:【学习前提】 1. 具备python3语言基础 【学习人群】 1. 手工测试人员学习UI自动化测试技能 2. 开发人员转岗测试开发岗位 3. 如具有丰富的自动化测经验,本课程可能并不满足你学习计划:1.下载课程中配套的软件资料 2.结合课件中Demo可完成学习任务课程目标:掌握UI自动化测试框架的设计与实现课程简介:UI自动化框架的设计需储备基础知识,方能完成自动化测试框架的实现,如数据驱动、日志、配置文件等AutoUiTestFrame自动化框架的目录结构初步进行规划,目录结构如下:Config 配置文件的目录v config.ini 配置文件;v globalconfig.py 获得日志路径、测试用例路径、测试报告路径、测试数据路径;v Data 测试数据;v TestData.xlsx 测试数据。Public 公共文件库v Common 封装的公共的方法n Commonconfig.py 公共的参数配置:调试过程中的测试数据等;n DoExcel.py 操作excel(数据驱动);n
Send
_mail.py 发送邮件(html);n ReadConfigIni.py 读取ini格式的配置文件;n TestCaseInfo.py 测试用例信息;n Log.py 日志类。
设置
日志类,其他模块或文件需要日志类时,调用该文件。v Pages 使用po
模式
设计的测试页面n BasePage.py 基类,对一些测试页面公共方法、属性的封装及webdrive一些方法的二次封装;n Bing.py 测试页面。Report 测试报告v Log 日志目录n *****log日志。v TestReport 测试报告目录n ***html测试报告。TestCase 测试用例v TC_bing.py。Run.py 控制测试用例的运行。
socket的阻塞
模式
和
非阻塞
模式
文章目录socket的阻塞
模式
和
非阻塞
模式
如何将socket
设置
为
非阻塞
模式
send
和recv函数在阻塞和
非阻塞
模式
下的表现
非阻塞
模式
下
send
和recv函数的返回值总结阻塞与
非阻塞
socket的各自使用场景 socket的阻塞
模式
和
非阻塞
模式
如何将socket
设置
为
非阻塞
模式
无论是Windows还是Linux,默认创建的socket都是阻塞
模式
的。 在linux上,我们可以使用fcntl函数或者ioctl函数给创建的socket增加O_NONBLOCK标志来将socket
设置
为
非阻塞
模式
。 int o
WebServer为什么需要将socket
设置
为
非阻塞
?
目录一些基本概念解释1.socket文件描述符有哪些2.socket文件描述符
设置
为阻塞的影响二、使用epoll模型将socket
设置
为
非阻塞
1.listenfd
非阻塞
2.clientfd
非阻塞
(1)epoll的ET
模式
(2)epoll返回读写事件,但不一定真的可读写小结 一些基本概念解释 1.socket文件描述符有哪些 网络中的客户端和服务器进行连接通信时需要建立连接,服务器端需要两个socket文件描述符,分别是建立连接时需要的监听文件描述符listenfd和连接完成后的已连接文件描述符clientf
socket
设置
为
非阻塞
模式
1,套接字的默认状态是阻塞的。即当发出一个不能立即完成的套接字调用时,该进程将被投入睡眠,等待相应操作完成。2,阻塞的套接字分为下面四类:输入操作:包括read、recv、recvfrom和recvmsg。输出操作:包括write、
send
、
send
to和
send
msg。接受外来连接,accept 函数。发起外出连接,connect 函数。3,将一个socket
设置
成
非阻塞
模式
,使用fcntl...
服务器编程心得(四)—— 如何将socket
设置
为
非阻塞
模式
只要将accept4()最后一个参数flags
设置
成SOCK_NONBLOCK即可。3. 除了创建socket时,将socket
设置
成
非阻塞
模式
,还可以通过以下API函数来
设置
:参考:),linux下如果调用fcntl()
设置
socket为
非阻塞
模式
,不仅要
设置
O_NONBLOCK
模式
,还需要在接收和发送数据时,需要使用MSG_DONTWAIT标志,即在recv,recvfrom和
send
,
send
to数据时,将flag
设置
为MSG_DONTWAIT。
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章