社区
C++ 语言
帖子详情
如何让阻塞的函数返回
igoon
2008-02-19 03:17:24
用到一个函数,比如调用基于阻塞的SOCKET连接的时候例如Accept函数,当一直没有连接过来的时候,就一直在那儿等,有没有什么办法能让其超过了五秒后,还没有连接过来,就主动返回,中止这个Accept函数呢?
...全文
116
8
打赏
收藏
如何让阻塞的函数返回
用到一个函数,比如调用基于阻塞的SOCKET连接的时候例如Accept函数,当一直没有连接过来的时候,就一直在那儿等,有没有什么办法能让其超过了五秒后,还没有连接过来,就主动返回,中止这个Accept函数呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Bambo
2008-02-19
打赏
举报
回复
ACE里头有实现,不过看起来比较麻烦
erwin1984
2008-02-19
打赏
举报
回复
如果不想改变原有的socket属性和机制,还有一种方法,
自身创建一个socket来连接本地的accept socket所监听的端口。
taodm
2008-02-19
打赏
举报
回复
不能,也不该。
igoon
2008-02-19
打赏
举报
回复
不好意思,我的意思是说能不能用信号量什么之类的来处理,而不用异步或者close socket来解决这个问题。
我想用其它的一些函数来让这个Accept函数来返回。谢谢!
xgbing
2008-02-19
打赏
举报
回复
还没看完教程吧
继续看教程,后面讲异步通讯
erwin1984
2008-02-19
打赏
举报
回复
最好把socket设置成非阻塞,用select来确定read事件,然后调用accept来接受新的连接请求。
erwin1984
2008-02-19
打赏
举报
回复
可以设置超时,也可以在另外一个线程中close这个socket,accept就会失败返回了。
BluntBlade
2008-02-19
打赏
举报
回复
socket有超时选项的。查一下setsockopt函数看看。
《Linux系统编程、网络编程》 第9章 高级IO
课程内容:1.非
阻塞
IO 如何将
阻塞
的读写设置为非
阻塞
的读写。2.文件锁 1)使用fcntl
函数
实现 2)使用flock
函数
实现3.多路IO select方式,poll方式。 4.异步IO5.存储映射
阻塞
函数
和非
阻塞
函数
的区别
简单理解:
阻塞
函数
就是:程序一直停在此
函数
处,等待后续操作,有相关操作之后程序才能继续执行,而非
阻塞
函数
是:程序运行在此不会中断,继续向下执行,当此处有操作时,继续此条件的后续操作 如c++中: kbhit()在执行时,检测是否有按键按下,有按下
返回
非0值,没有按下则
返回
0,是非
阻塞
函数
; getch()在执行时, 检测按下什么键, 如果不按键该
函数
不
返回
,也就不进行下一步操作,是
阻塞
函数
。 其他解释: 对于异步程序和非
阻塞
I/O,记得在知乎上看到过一个非常好的举例:你给图书馆打电话查书,图书馆的管理员会
go语言中的
阻塞
函数
和非
阻塞
函数
实现
其中,func1就是非
阻塞
函数
,对于main
函数
而言,在调用func1后,不需要去关心func1中的for循环有没有运行结束,它能立马拿到结果,从而可以去做自己想做的其它事情,当然,这里main的
函数
,即主线程需要保证当前线程不会挂掉。其中,func1就是
阻塞
函数
,因为main
函数
在调用func1时,它需要去等待func1
函数
for循环结束从而拿到
返回
值,在func1
函数
返回
之前,main
函数
不能去做其它的事情,func1
函数
就是被挂起了。非
阻塞
函数
指在不能立刻得到结果之前,该
函数
不会
阻塞
当前线程。
网络编程堵塞
函数
堵塞
函数
缺省情况下,套接字建立后所处于的模式就是
阻塞
I/O 模式 读操作中的read、recv、recvfrom 写操作中的write、send 其他操作:accept、connect sendto
函数
不堵塞 UDP不用等待确认,没有实际的发送缓冲区,所以UDP协议中不存在发送缓冲区满的情况,在UDP套接字上执行的写操作永远都不会
阻塞
。 以read
函数
为例: 进程调用read
函数
从套接字上读取数据,当套接字的接收缓冲区中还没有数据可读,
函数
read将发生
阻塞
。它会一直
阻塞
下去,等待套接字的接
虹科知识分享|关于
阻塞
函数
和非
阻塞
函数
阻塞
函数
(blocking):在执行时会
阻塞
当前线程,通常会有一个超时时间。非
阻塞
函数
(non-blocking):不会
阻塞
当前线程,直接
返回
结果,通常会有一个对应的缓存。
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章