社区
C++ 语言
帖子详情
怎样通过一个线程结束另一个线程的accept()呢?
zyq_123
2012-05-15 12:13:10
循环
socketclient=accept(......);
//怎样通过另一个线程结束accept呢?
...全文
261
6
打赏
收藏
怎样通过一个线程结束另一个线程的accept()呢?
循环 socketclient=accept(......); //怎样通过另一个线程结束accept呢?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zyq_123
2012-05-15
打赏
举报
回复
是不是closesocket(sListen)?此处的sListen是socket()返回的SOCKET。
若是closesocket(sListen),那么,accept()返回的是什么值?
是不是INVALID_SOCKET?
是不是调用closesocket(sListen)后,accept()就不再等待了?
www_adintr_com
2012-05-15
打赏
举报
回复
在 accept 那个 socket 上调用 close.
regainworld
2012-05-15
打赏
举报
回复
楼上你得说明操作系统
morebread
2012-05-15
打赏
举报
回复
accept中的socket可以在其他线程中通过closesocket来结束accpet,其他的例如recv,send等之类的所有阻塞的操作也一样适用。我已经试过了,closesocket后accept返回值就是INVALID_SOCKET
mars_man
2012-05-15
打赏
举报
回复
LS说的方法是不行的。在一个线程closesocket另一个线程中处于accept阻塞中的socket,这样本线程也一块儿阻塞了。
首先需要说的是,如果LZ在阻塞线程中根本就不包含退出线程的代码,那就不会有和谐的方法了,只能用TerminateThread暴力拆迁了。
如果accept之后有退出代码的话,你可以通过这个线程发起连接,之后等着退出逻辑。
其实改善一点设计就不会这么糟糕了,比如使用select等这些方法,这样在accept之前就有空间可以安排退出逻辑了。
mars_man
2012-05-15
打赏
举报
回复
LS说的方法是不行的。在一个线程closesocket另一个线程中处于accept阻塞中的socket,这样本线程也一块儿阻塞了。
首先需要说的是,如果LZ在阻塞线程中根本就不包含退出线程的代码,那就不会有和谐的方法了,只能用TerminateThread暴力拆迁了。
如果accept之后有退出代码的话,你可以通过这个线程发起连接,之后等着退出逻辑。
其实改善一点设计就不会这么糟糕了,比如使用select等这些方法,这样在accept之前就有空间可以安排退出逻辑了。
Java的
accept
()
在Java中,
accept
()方法通常与网络编程中的套接字(Sockets)相关联,尤其是在服务器端的类中。
accept
()方法用于等待并接受到来的连接请求。当
一个
客户端尝试与服务器建立TCP连接时,如果服务器端的正在监听指定的端口,那么
accept
()方法就会建立连接,并返回
一个
新的Socket对象来与客户端进行通信。下面是
accept
()
阻塞,非阻塞connect()和
accept
()
非阻塞connect()和
accept
()的区别
Socket中
Accept
()和Begin
Accept
()的区别(C#)
区别: Begin
Accept
()会开启
一个
异步操作来获取连接的Socket,而
Accept
()会将程序在该位置中断来等待连接。 如果采用这种最简单的形式,如果使用 BeginAccpet() 在启动程序后,程序会直接运行
结束
,而使用
Accept
() 时程序则会在当前位置停止 Begin
Accept
()的回调函数: 回调函数会在操作
结束
后(在这里就是接受到了Socket)调用,Begin
Accept
的第二个参数会转化为 IAsyncResult 并作为回调函数的参数使用, IAsyncResult.As
linux 多
线程
或多进程 epoll处理
accept
惊群问题
什么是惊群 简单说,惊群是因为多进程(多
线程
)在同时阻塞等待同
一个
事件的时候(休眠状态),当时间发生时,就会唤醒所有等待的(休眠的)进程(
线程
)。但是事件只能被
一个
进程或
线程
处理,而其他进程(
线程
)获取失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。 产生惊群的条件 多个进程或者多个
线程
同时等待处理
一个
事件 具体场景复现 测试环境 : debian11 内核5.10.0-8 编译器 clang11 多
线程
和多进程在惊群问题上差不多,为了少些一点,下文中没有特殊说明,多
线程
也包含
Accept
阻塞怎么办?,
Accept
阻塞时,导致监听socket不能释放问题的解决方法: 采用
Accept
线程
,专门开个
线程
去接收,在网络编程中,就是在receive端
线程
中开个
accept
线程
去接收,可以解决阻塞问题,因为父
线程
结束
了,子
线程
会被操作系统回收,不用我们做了,当然我们
线程
不能开太多,否则会出现malloc申请内存都出错。 部分代码说明: //采用
accept
线程
if (flag)
C++ 语言
65,214
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章