Chinaunix

标题: 再问关于TCP接连的问题 [打印本页]

作者: xinrui_aozhi    时间: 2008-06-05 20:43
标题: 再问关于TCP接连的问题
前一段时间我问了一个关于TCP接连的问题,主要是问在listen以后,可不可以对这包进行一些如排队的处理,先谢谢那些帮助过我的朋友,现在我又碰到一个问题:
     在listen后,我们能不能不用accept( )也能得到这个包的IP地址,如果,用了accept( )后这个包从已完成队列出来后,到底在又到哪去了,要是再对accept( )返回的fd进行如队列的操作,如果要是在这个程中把这包丢了,怎么能简单能客户一个错误回复?谢谢了!!
作者: lanying_wzw    时间: 2008-06-05 21:14
楼主你的概念有很多问题,首先TCP是面向流的协议,对使用者而言是没有包的概念的,TCP内部使用分节的概念,保证你发送的数据能被对方收到,而且不会重复。
accept()返回只是表示TCP三次握手完成,和客户端的连接建立成功。TCP协议栈会对请求进行排队
作者: xinrui_aozhi    时间: 2008-06-05 21:48
标题: 回复 #2 lanying_wzw 的帖子
lanying_wzw 谢谢你的回答 但TCP三次握手完成应该是listen后吧 它把完成的接连放在已完成队列,返回这个接连的fd accept再从里面取 我现在最想知道的就是 通过这个listen返回的fd 我们能不能不用accept也能提到发出这个接连的客户IP.谢谢!!!
作者: lanying_wzw    时间: 2008-06-05 21:56
listen()返回的不是fd,只是对用socket()建立的fd进行监听操作,至于你说的不accept就想知道连接队列所有建立连接的客户IP,我觉得不行
作者: cugb_cat    时间: 2008-06-05 22:24
三次握手在调用listen之后和listen的套接字close之前,这段时间都有可能进行三次握手,三次握手过程跟用户层程序无关,是由内核自动完成的,调用accept就是为了去看一下是否有完成三次握手的连接了。为什么不用accept呢?
作者: system888net    时间: 2008-06-05 22:57
原帖由 cugb_cat 于 2008-6-5 22:24 发表
三次握手在调用listen之后和listen的套接字close之前,这段时间都有可能进行三次握手,三次握手过程跟用户层程序无关,是由内核自动完成的,调用accept就是为了去看一下是否有完成三次握手的连接了。为什么不用 ...


赞同.
作者: xinrui_aozhi    时间: 2008-06-06 11:53
原帖由 cugb_cat 于 2008-6-5 22:24 发表
三次握手在调用listen之后和listen的套接字close之前,这段时间都有可能进行三次握手,三次握手过程跟用户层程序无关,是由内核自动完成的,调用accept就是为了去看一下是否有完成三次握手的连接了。为什么不用 ...



这说法我同意 如果我已accept了,然后把它这个接连套接口关闭,但保留原来传给它的 监听套接口描述字,还可不可以用这个监听套接口描述字再进行一次accept?? 谢谢!!
作者: chzCPU    时间: 2008-06-06 13:46
原帖由 xinrui_aozhi 于 2008-6-6 11:53 发表



这说法我同意 如果我已accept了,然后把它这个接连套接口关闭,但保留原来传给它的 监听套接口描述字,还可不可以用这个监听套接口描述字再进行一次accept?? 谢谢!!

当然可以
作者: xinrui_aozhi    时间: 2008-06-06 17:21
原帖由 chzCPU 于 2008-6-6 13:46 发表

当然可以


这样好像不可以 我刚试了 这样是对下一个listenfd进行accept( ),这时只有客户端再发起一次接连请求.还有没有别的办法 让我们能在accept( )之前得到客户端的IP  谢谢!!!
作者: qingfengjianke    时间: 2008-06-06 17:23
标题: 回复 #9 xinrui_aozhi 的帖子
估计不可以....
作者: xinrui_aozhi    时间: 2008-06-06 18:44
标题: 回复 #10 qingfengjianke 的帖子
有没有什么网络层的函数可调用来实现获得客户端IP??
作者: UnixStudier    时间: 2008-06-06 22:09
getpeername(对端),getsockname(本地)
作者: xinrui_aozhi    时间: 2008-06-06 22:30
标题: 回复 #12 UnixStudier 的帖子
UnixStudier 谢谢你 不过我想问问 这两函数在建立TCP接连的哪个阶段可用 我一会 自己也google一下 谢谢
作者: xinrui_aozhi    时间: 2008-06-06 22:34
标题: 谁知道UNIX内核中accept函数原型
谁知道UNIX内核中accept函数原型 我想看它的代码 可我在Cygwin中找不着
作者: lanying_wzw    时间: 2008-06-08 23:56
getpeername(对端),getsockname(本地)
getpeername是针对已连接套借口的,所以最好还是看看accept的源码,明白如何访问已连接队列,linux的应该好找
作者: xinrui_aozhi    时间: 2008-06-09 11:03
标题: 回复 #15 lanying_wzw 的帖子
是呀 我看的是TCP/IP详解上的 现在在网上基本上找不着UNIX的内核代码 我想将accept改了或写一个类似的 还不知道行不行




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2