免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4387 | 回复: 11
打印 上一主题 下一主题

关于建立TCP连接的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-25 01:09 |只看该作者 |倒序浏览
我想问问 在建立TCP连接时,listen()后,可不可以先把它得到的文件描述保存起来,对它进行一些操作后(比如:进行排队,加入到一个队列,再取出),再accept()它. 这我样试过,看进来没事,但运行时出现什么堆栈问题.还有我们通过文件描述到底能得什么信息.请各位高手帮忙,先谢了!!

论坛徽章:
0
2 [报告]
发表于 2008-05-25 07:17 |只看该作者
listen后你想做什么就做什么啊,知道accept时候才进行阻塞接受连接

论坛徽章:
0
3 [报告]
发表于 2008-05-25 11:37 |只看该作者
实际上对于socket接口来说,在listen得到一个文件描述符之后,三次握手已经完成,一个TCP连接已经被建立了。至于应用层什么时候去accept可以自己去控制,但要注意未被accept的连接数是有限的,如果有新的TCP连接请求到来socket就没法处理了,可能会出现连接超时的错误。

论坛徽章:
0
4 [报告]
发表于 2008-05-25 11:57 |只看该作者
谢谢你,我知道你的意思,但在调用LISTEN之后  ACCEPT之前还有一件很重要的事是内核自动完成的,那就是内核要维护LISTEN给监听套接口的两个队列,未完成队列和已完成队列,在这内核自动完成三次握手,完成握手的就到已完成队列,当已已完成队列为非空时,ACCEPT才能被激活,我想的是怎么人为控制这个已完成队列,先对它进行一些操作再给ACCEPT.比如这样的操作:我截住内核,不让它在已完成队列为非空时马上激活ACCEPT,而是我先自己建一个队列,把已完成队列里的请求放这里(有一些优化的算法,操作),当这个队列不为空时才激活ACCEPT,让它来这个队列取请求. 那我现在怎样才能做到这点??!!!郁闷呀.......

[ 本帖最后由 xinrui_aozhi 于 2008-5-25 12:02 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-05-25 12:04 |只看该作者
原帖由 xinrui_aozhi 于 2008-5-25 01:09 发表
我想问问 在建立TCP连接时,listen()后,可不可以先把它得到的文件描述保存起来,对它进行一些操作后(比如:进行排队,加入到一个队列,再取出),再accept()它. 这我样试过,看进来没事,但运行时出现什么堆栈问题.还有我 ...

你listen了很多端口吗?

论坛徽章:
0
6 [报告]
发表于 2008-05-25 12:27 |只看该作者

回复 #5 cheney_lang 的帖子

不是呀 我就LISTEN了一个端口 一个端口不是可以有多个连接么 我是想一个线程进行LISTEN 别的线程就负责别的如:ACCEPT之类的事

[ 本帖最后由 xinrui_aozhi 于 2008-5-25 12:29 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-05-25 12:40 |只看该作者
listen不能得到fd,listen的作用是在某个socket上等待客户的连接,accept才产生新的fd。
不明白你的需求,或许你需要这样做:使用一个线程来accept,将accept返回的fd放到一个队列里面,然后其它线程可以取fd进行通信。

论坛徽章:
0
8 [报告]
发表于 2008-05-25 12:43 |只看该作者

回复 #7 cheney_lang 的帖子

你的意思我明白 LISTEN不是可以得到 监听套接字的FD吗? 我只是把你建议那种做法,担到ACCEPT前了

论坛徽章:
0
9 [报告]
发表于 2008-05-25 12:47 |只看该作者
原帖由 xinrui_aozhi 于 2008-5-25 12:27 发表
不是呀 我就LISTEN了一个端口 一个端口不是可以有多个连接么 我是想一个线程进行LISTEN 别的线程就负责别的如:ACCEPT之类的事

这样也可以,tinyproxy就是这么做的。你再复习一下listen函数。

论坛徽章:
0
10 [报告]
发表于 2008-05-25 12:52 |只看该作者

回复 #9 cheney_lang 的帖子

好的 谢谢 谢谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP