首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

linux中select()函数分析 02

linux中select()函数分析 02

在此不作赘述,请详man signal.以上是cpu在作tcp/ip数据传输实验积累的经验,若有错漏,请狂炮击之。


  唉,昨天在hacker区被一帮孙子轰得差点儿没短路。ren cpu(奔腾的心) z80补充关于select在异步(非阻塞)connect中的应用,刚开始搞socket编程的时候我一直都用阻塞式的connect,非阻塞connect的问题是由于当时搞proxy scan而提出的呵呵通过在网上与网友们的交流及查找相关FAQ,总算知道了怎么解决这一问题。同样用select可以很好地解决这一问题。大致过程是这样的:1.将打开的socket设为非阻塞的,可以用fcntl(socket, F_SETFL, O_NDELAY)完成(有的系统用FNEDLAY也可)。


  2.发connect调用,这时返回-1,但是errno被设为EINPROGRESS,意即connect仍旧在进行还没有完成。


  3.将打开的socket设进被监视的可写(注意不是可读)文件集合用select进行监视,如果可写,用getsockopt(socket, SOL_SOCKET, SO_ERROR, &error, sizeof(int));来得到error的值,如果为零,则connect成功
返回列表