在一辅助线程中,CSocket ::Accept()已经进入阻塞,现在要停止关闭这个端口,怎么做?

crazyingmouse 2003-08-30 01:31:11
在一辅助线程中,CSocket ::Accept()已经进入阻塞,现在要停止关闭这个端口,怎么做?
...全文
252 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oversense 2003-08-31
  • 打赏
  • 举报
回复
直接closesocket(监听的sock);
就ok
taolei 2003-08-31
  • 打赏
  • 举报
回复
ghz:
在其它线程中关闭这个套接字当然没问题,否则那阻塞的socket岂不是都不能正常关闭了。
wglacier 2003-08-31
  • 打赏
  • 举报
回复
1、smch(Ashes Of Time)说的可行,假如你的m_bStop变量为true,就建立一个套接字和自己连,就可以跳出Accept函数,然后你判断,如果m_bStop成立,就退出
CSocket sock;
...

while(sock.Accept(..))
{
if(m_bStop) break;
//接收该连接
}

2、在其它线程中关闭这个套接字应该也行,不过不知道有没有问题 closesocket(hSock);
caomuyong1 2003-08-31
  • 打赏
  • 举报
回复
兄弟,WSACleanup应该可以吧,
不然后Close吧
taolei 2003-08-31
  • 打赏
  • 举报
回复
在其他的线程中close这个socket,close后Accept自然也会退出并返回错误。
crazyingmouse 2003-08-31
  • 打赏
  • 举报
回复
TO smch(Ashes Of Time)
没明白你的意思,我在辅助线程中已经阻塞了,再去开一个线程自连? 然后根据全局变量判断是否再开一个Csocket? 那我程序不是一直在不听地开关端口了?

To wwwllg(wwwllg)
这个方法我试过,结果是client还是能连得上,而且没有错误信息。数据都不知道去哪里了。

to wangjidh(背土蚂蚁)
我线程已经accept阻塞了,怎么在下面跟关闭方法? 譬如我有一全局变量 m_bool,哪怕一button,我希望m_bool或者button一按下去,立刻把这个端口关闭掉。

我本来想把这个线程强制terminate掉,然后把Csocket delete掉,但发现不行,端口还是能
连得上,但数据知道传到哪里去了,可怕的是连没有错误信息了。
client 那边csocket.connect返回的是连接正常。
wangjidh 2003-08-30
  • 打赏
  • 举报
回复

if(!g_sListen.Accept(sConnect,saClient))

…………………………
关闭办法
g_sListen.Close();
Sleep(300); //等待线程结束
WSACleanup();
windows_editor 2003-08-30
  • 打赏
  • 举报
回复
gz
UDX协议 2003-08-30
  • 打赏
  • 举报
回复
一个不好的方法是,在外面delete掉这个csock对象。
smch 2003-08-30
  • 打赏
  • 举报
回复
设置一个全局变量g_bStop,在程序中再建立一个socket,自己连接自己,然后判断g_bStop决定是否退出还是接收数据啊。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧