WebServer icon indicating copy to clipboard operation
WebServer copied to clipboard

TCP连接3次握手与accept()的关系

Open seawood opened this issue 5 years ago • 8 comments

hi~ 关于你对“建立连接的过程”的描述有点疑问:“当TCP连接完成3次握手后,会触发listenfd的读事件,应用程序调用accept()”。 accept()的调用应该是服务端接收到SYN分节之后调用的,调用accept()使得TCP层发送一个SYN ACK分节,当收到ACK之后accept()返回。所以accept()返回才标志着TCP三次握手完成。 请问accept()是由MainReactor线程调用的还是SubReactor()线程调用的?

seawood avatar Apr 19 '19 04:04 seawood

我是在MainReactor里accept的,但你关于accept的描述是完全错误的

linyacool avatar Apr 19 '19 04:04 linyacool

咦?关于accept()的描述我是看到《UNIX网络编程》卷1里图2-2所以才这么说的。 能不能麻烦给我讲讲你的理解?

seawood avatar Apr 19 '19 08:04 seawood

大家加个qq群可好?

------------------ 原始邮件 ------------------ 发件人: "Yingying Xie"[email protected]; 发送时间: 2019年4月19日(星期五) 下午4:40 收件人: "linyacool/WebServer"[email protected]; 抄送: "Subscribed"[email protected]; 主题: Re: [linyacool/WebServer] TCP连接3次握手与accept()的关系 (#8)

咦?关于accept()的描述我是看到《UNIX网络编程》卷1里图2-2所以才这么说的。 能不能麻烦给我讲讲你的理解?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

ZeroOcyc avatar Apr 19 '19 08:04 ZeroOcyc

我的QQ:1468426665

| | 谢英英 邮箱:[email protected] |

签名由 网易邮箱大师 定制

在2019年04月19日 16:42,ZeroOcyc 写道: 大家加个qq群可好?

------------------ 原始邮件 ------------------ 发件人: "Yingying Xie"[email protected]; 发送时间: 2019年4月19日(星期五) 下午4:40 收件人: "linyacool/WebServer"[email protected]; 抄送: "Subscribed"[email protected]; 主题: Re: [linyacool/WebServer] TCP连接3次握手与accept()的关系 (#8)

咦?关于accept()的描述我是看到《UNIX网络编程》卷1里图2-2所以才这么说的。 能不能麻烦给我讲讲你的理解?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

seawood avatar Apr 19 '19 08:04 seawood

咦?关于accept()的描述我是看到《UNIX网络编程》卷1里图2-2所以才这么说的。 能不能麻烦给我讲讲你的理解?

你好好看看那个图的描述啊,图和描述都没错,到你这话就错了,你可以写个程序试试啊,单纯将可能很难理解

linyacool avatar Apr 22 '19 15:04 linyacool

大家加个qq群可好? ------------------ 原始邮件 ------------------ 发件人: "Yingying Xie"[email protected]; 发送时间: 2019年4月19日(星期五) 下午4:40 收件人: "linyacool/WebServer"[email protected]; 抄送: "Subscribed"[email protected]; 主题: Re: [linyacool/WebServer] TCP连接3次握手与accept()的关系 (#8) 咦?关于accept()的描述我是看到《UNIX网络编程》卷1里图2-2所以才这么说的。 能不能麻烦给我讲讲你的理解? — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

别了别了。。。我这渣渣水平还建群。。

linyacool avatar Apr 22 '19 15:04 linyacool

hi~ 关于你对“建立连接的过程”的描述有点疑问:“当TCP连接完成3次握手后,会触发listenfd的读事件,应用程序调用accept()”。 accept()的调用应该是服务端接收到SYN分节之后调用的,调用accept()使得TCP层发送一个SYN ACK分节,当收到ACK之后accept()返回。所以accept()返回才标志着TCP三次握手完成。 请问accept()是由MainReactor线程调用的还是SubReactor()线程调用的?

我的理解是accept其实只是从内核维护的已连接队列中抽出一个返回给调用者,和三次握手没啥关系,如果已连接队列为空,则accept会阻塞直到已连接队列不为空。accept可以在三次握手之前调用,也可以在之后调用。不知道理解是否正确,如有错误,感谢指正。

iLoveTangY avatar May 08 '19 11:05 iLoveTangY

hi~ 关于你对“建立连接的过程”的描述有点疑问:“当TCP连接完成3次握手后,会触发listenfd的读事件,应用程序调用accept()”。 accept()的调用应该是服务端接收到SYN分节之后调用的,调用accept()使得TCP层发送一个SYN ACK分节,当收到ACK之后accept()返回。所以accept()返回才标志着TCP三次握手完成。 请问accept()是由MainReactor线程调用的还是SubReactor()线程调用的?

我的理解是accept其实只是从内核维护的已连接队列中抽出一个返回给调用者,和三次握手没啥关系,如果已连接队列为空,则accept会阻塞直到已连接队列不为空。accept可以在三次握手之前调用,也可以在之后调用。不知道理解是否正确,如有错误,感谢指正。

我也是这样理解的

linyacool avatar May 13 '19 02:05 linyacool