c - 关于网络套接字编程中的listen()、accept()(3次握手)

标签 c sockets networking

在网络套接字编程中,我知道 listen() 和 accept() 的作用。

但是,我想知道的是,在 tcp 中,3-way,三向握手发生在哪里。

listen() 是执行 3 次握手,还是 accept()?

我的意思是做 syn(client)//syn/ack(server)//ack(clinet) 数据包。

最佳答案

一旦应用程序调用了 listen(),TCP 堆栈将为任何传入连接执行 3 次握手。这些连接在内核中排队,accept() 然后从队列中检索下一个连接并返回它。

listen 有一个 backlog 参数,它指定了这个队列应该有多大(尽管我认为一些实现忽略了这一点,并使用了堆栈中内置的限制).当队列已满时,堆栈将不再为传入连接执行握手;客户端应该重试,当队列有空间时,它们的连接就会成功。

这样做是为了让客户端在正常情况下(当积压队列有空间时)尽快收到SYN/ACK,因此它不必重传SYN.

关于c - 关于网络套接字编程中的listen()、accept()(3次握手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34676972/

相关文章:

c - 找出单独一行中的两个数字的总和?

c - VIsual Studio 2013 中 C 语言的 GUI

c++ - 使用 C++ 客户端访问 C++ 服务器时出现问题

sockets - Swift 3 - 输入流

c# - 适用于小型企业应用程序的后端或数据库系统

java - 如何使用自定义协议(protocol)测试网络应用程序?

node.js - Testcafe:找不到资源的 dns 记录

c++ - 不同编译器的不同输出 - C 和 C++

c - 将数组的起始地址对齐为 32 位的倍数?

Java UDP数据包仅容纳5位