AsyncSockey的connect问题!

issink 2008-04-19 02:20:59
用asyncscoket的connect来连接一个虚假的没有的域名或IP地址时
程序会停止响应几秒钟

这个该怎么解决
以前用VB的mssocket连接的时候也没有出现这个问题
我不太懂什么同步/异步
但我想也许跟这个有关系

有什么好的解决办法吗
难道另开一个线程来连接?
...全文
107 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下
WinEggDrop 2008-04-19
  • 打赏
  • 举报
回复
呵呵.你连接域名时,你要先将域名解析为IP,才能连接的.将域名解析为IP,可以用
gethostbyname(),这个是阻塞的API;也可以用WSAAsyncGetHostByName(),这个是异步非阻塞的.
arong1234 2008-04-19
  • 打赏
  • 举报
回复
CAsyncSocket当然是异步的,无论成功与否,它都应该立刻返回,如果你程序停顿在那,一定另有原因

至于不存在的域名地址,连接成功或者失败信息最长2分钟后才能回来,这是已知问题。不过你为什么会连不存在的域名?

不管怎么说,CAsyncSocket::Connect都是立刻返回的,不会停顿在那,除非你用法有错误
cnzdgs 2008-04-19
  • 打赏
  • 举报
回复
没这样试过,感觉应该是域名解析阻塞了一段时间。
yebeans 2008-04-19
  • 打赏
  • 举报
回复
可能是你连域名的时候会先从DNS获取对应的IP,这个操作需要一定的时间并且阻塞(如果对应域名不存在可能会尝试多个 DNS服务器)所以卡住。
所以域名解析放在其他地方做,连的时候就只用IP连。
Zhymax 2008-04-19
  • 打赏
  • 举报
回复
好像GetPeerName()在一些情况下会阻塞,你看看有没有使用
scq2099yt 2008-04-19
  • 打赏
  • 举报
回复
一般是发送一个线程、接收一个线程、处理一个线程
CathySun118 2008-04-19
  • 打赏
  • 举报
回复
为何要连接虚假的没有的域名或IP地址?
issink 2008-04-19
  • 打赏
  • 举报
回复
很头疼的问题

现在又有了新的发现

Asyncsocket在连接虚假的IP时到是非阻塞

但在连接虚假的域名时 程序就会挂起
直到连接不上返回结果 程序才恢复
issink 2008-04-19
  • 打赏
  • 举报
回复
怎么我感觉
CAsyncsocket是阻塞的呢


用CAsyncsocket的connect函数时(create的时候 用的是FD_CONNECT)程序会挂起呢
直到连接到指定IP或连接不上时程序才恢复呢
yebeans 2008-04-19
  • 打赏
  • 举报
回复
你可以用CAsyncSocket(都封装好了的。想看实现也有代码)。
异步连接会立刻返回,连接完成后会发送FD_CONNECT并触发OnConnect函数。
issink 2008-04-19
  • 打赏
  • 举报
回复
查了些资料
好象涉及的挺多
异步/同步
阻塞/非阻塞

似乎socket在发送一个连接函数时都会发生阻塞情况

有三种解决方法

1,放到一个自己写的线程中
2,使连接函数立刻返回 另一个函数轮询此套接字
3,使连接函数立刻返回 请求完成的同时发送一条windows消息

我觉得采用2,3条可以

但是如果使连接函数立刻返回呢
如果进行后面的轮询或发送windwos消息的操作呢

18,356

社区成员

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

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