多线程socket非阻塞连接问题,急。。。。

L_serein 2009-02-17 04:24:36
利用多线程同时通过socket发起多个tcp的connect请求,会出现排队的现象么?connect是非阻塞的。
我利用了slect来控制等待时间,但是如果出现排队的话,我的等待时间是不可控制的,并会随着线程数增加而增加。
是不是多线程+非阻塞模型是不可行的呀?
...全文
209 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 L_serein 的回复:]
我试想做对一个ip段的某一个端口进行扫描。如果阻塞的太慢了。如果某ip该端口未开得等十几秒
[/Quote]
端口扫描你用多线程的?一个端口一个线程?帖代码咯。你扫描6万多个端口肯定没那么多线程可用吧?
我以前写过端口扫描,没用多线程,直接限定时间的select加阻塞的recvfrom。按顺序扫描,这样可能时间上扫描全部65535个端口一次得好几分钟。
challenge99 2009-02-17
  • 打赏
  • 举报
回复
如果是为了做扫描, 不connect不行么?

自己处理SYN 和 RST 我觉的更好, 而且是非阻塞的
hhyttppd 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 L_serein 的回复:]
我用非阻塞connect后,然后用select设置超时时间。但是随着我threads数增加,select所需要设置的等待时间也要增加才能发现开放的端口。所以我怀疑是不是多个socket要同时需要网卡对外连接,从而有了这个排队等待的时间。从而使select需要阻塞的时间变长
[/Quote]

应该不是这样的。
L_serein 2009-02-17
  • 打赏
  • 举报
回复
我用非阻塞connect后,然后用select设置超时时间。但是随着我threads数增加,select所需要设置的等待时间也要增加才能发现开放的端口。所以我怀疑是不是多个socket要同时需要网卡对外连接,从而有了这个排队等待的时间。从而使select需要阻塞的时间变长
L_serein 2009-02-17
  • 打赏
  • 举报
回复
我试想做对一个ip段的某一个端口进行扫描。如果阻塞的太慢了。如果某ip该端口未开得等十几秒
  • 打赏
  • 举报
回复
多线程socket为何需要排队?不过配合select的话直接阻塞模式就可以了。
Dinelgua 2009-02-17
  • 打赏
  • 举报
回复
建立连接还是采用阻塞模式 带超时时间的比较好
因为正常的建立连接 耗时并不长,如果到超时时间 例如5S还连不上估计确实存在问题可以重联或放弃
且如果是多线程 每个线程负责一个连接 就互不影响更好了
所以对于建立连接因为频率低,安全性要求高 所以还是同步好一些,最好再设置个合理的超时时间 不然一直等下去也不好

发送和接收数据建议采用非阻塞模式,毕竟频率很高

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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