当前位置:首页>Linux>跟 AI 学 Linux:为什么 Linux 将 socket 监听分为 bind 与 listen 两个系统调用

跟 AI 学 Linux:为什么 Linux 将 socket 监听分为 bind 与 listen 两个系统调用

  • 2026-02-11 12:35:26
跟 AI 学 Linux:为什么 Linux 将 socket 监听分为 bind 与 listen 两个系统调用

1. 议题

在  Golang 中通过 net.Listen("tcp", ":8080") 一个函数就能实现 socket 监听,在 Netty 中也是通过一个方法 b.bind(port) 实现的,那为什么在 Linux 中要分成 bind 和 listen 两个系统调用呢?

让我们继续请 AI 老师来为我们解惑。

2. 对话

2.1 问

我在学习 Linux socket 编程时发现 Linux 将 socket 监听分成两步:bind 和 listen。而我之前用 Golang 和 Netty 都是通过一个函数完成,那为什么 Linux 要设计两个系统调用呢?这不是增加了 API  的复杂度吗?

2.2 答

这是个特别好的问题,而且你不是第一个被它“绊住”的人 🙂表面看确实像是:Linux 把一件事拆成了两步,Golang / Netty 却一步到位。但这背后其实是分层设计 + 历史包袱 + 灵活性三件事叠加的结果。

bind 和 listen 本质上不是一回事

bind:只是“占个地址”,它做的事情非常单纯:

  • • 把 socket 和 本地地址(IP + 端口) 关联起来
  • • 不代表这个 socket 会接收连接

listen:改变 socket 的“角色”,做的是一件状态转换的事情:

  • • 把 socket 从「主动 socket(client / 未定义)」➜  「被动 socket(server)」
  • • 内核开始为它维护:
    • • 半连接队列(SYN queue)
    • • 全连接队列(accept queue)

此时这个 socket 才真正成为:一个能被 accept() 的监听 socket

为什么 Linux 不直接来一个 listen(addr)

因为在设计 Linux socket API 的那个年代(80 年代),Socket API 是“通用通信接口”。

当年 socket 的目标不仅是 TCP Server,而是:

  • • TCP
  • • UDP
  • • 本地 socket(AF_UNIX)
  • • RAW socket
  • • 甚至奇奇怪怪的协议

所以他们想要的是:

  • • socket()   → 创建通信端点
  • • bind()     → 指定地址
  • • connect()  → 主动连接
  • • listen()   → 被动接收连接

每一步语义清晰、职责单一。

这真的算“API 复杂度”吗?

从内核视角看:不是复杂,是原子化

  • • 每个系统调用只做一件事
  • • 组合方式交给用户
  • • 高级语言 / 框架负责“简化”

这其实是一种经典的分层哲学:

内核:能力完整、原语清晰语言:合理默认、适度封装框架:极致易用、业务导向

如果 Linux 一开始就做成 listen(addr),那么 UDP、UDS和自定义协议反而会被限制住。

2.3 思考

我明白了!Linux 把 bind 和 listen 拆开,是为了能力最大化;Golang / Netty 把它们合并,是为了体验最优化。

当下我最想深入研究的是 TCP 协议,特别是异常处理的部分。

2.4 问

我理解了 bind 和 listen 的语义。那么对于 TCP 协议,Linux 内核分别做了哪些操作呢?在执行流程中会产生哪些异常情况呢?

2.5 答

TCP bind 的核心动作

  1. 1. 地址合法性检查:
    • • IP 是否属于本机(或 INADDR_ANY
    • • 端口范围是否合法
    • • IPv4 / IPv6 协议族匹配
    • • 是否启用了 SO_REUSEADDR / SO_REUSEPORT
  2. 2. 端口占用检查(非常关键)
    • • 已存在 BIND socket
    • • TIME_WAIT socket
    • • 已连接 socket(active)
  3. 3. 自动分配端口(如果 port=0)
    • • 从 ip_local_port_range 中选一个
    • • 插入 TCP bind hash 表

bind 后 TCP socket 的状态仍是 TCP_CLOSE。

listen 对 TCP 做了哪些关键事情

  1. 1. TCP 状态迁移
    • • TCP_CLOSE  →  TCP_LISTEN
  2. 2. 初始化两个关键队列(非常重要)
    • • 半连接队列(SYN queue)
    • • 全连接队列(accept queue)
      • • 保存三次握手已完成的连接
      • • accept() 从这里取 socket
  3. 3. 注册监听端口到 listen hash
    • • 使内核能够把到来的 SYN 定位到这个 socket
    • • 监听 socket 进入 listen hash 表

bind 和 listen 阶段可能遇到的异常汇总bind 阶段异常

错误码
原因
EADDRINUSE
端口被占用
EADDRNOTAVAIL
IP 不属于本机
EACCES
权限不足
EINVAL
地址非法

listen 阶段异常

错误码
原因
EINVAL
socket 类型不支持 listen
EOPNOTSUPP
非 TCP 协议
EBADF
fd 非 socket

2.6 思考

我明白了,下面动手实验一下各种异常情况。

3. 实验

完整代码位于我的 gitee 仓库[1]

3.1 bind 端口冲突

printf("[%s] 尝试绑定端口 %d...\n", name, PORT);if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {    printf("[%s] bind 失败: %s (errno=%d)\n", name, strerror(errno), errno);    if (errno == EADDRINUSE) {        printf("[%s] 端口已被占用!\n", name);    }    close(sockfd);    return;}printf("[%s] bind 成功!\n", name);
./01_bind_conflict second=== 实验1: bind 端口冲突 ===[Server2] 尝试绑定端口 8888...[Server2] bind 失败: Address already in use (errno=98)[Server2] 端口已被占用!

3.2 不 bind 直接 listen

// 不调用bind,直接尝试listenprintf("\n尝试直接调用 listen()(没有先bind)...\n");if (listen(sockfd, 5) < 0) {   // ...} else {    printf("✓ listen 成功(意外,某些系统可能允许自动bind)\n");    // 获取实际绑定的地址和端口struct sockaddr_in actual_addr;    socklen_t addr_len = sizeof(actual_addr);    if (getsockname(sockfd, (struct sockaddr *)&actual_addr, &addr_len) < 0) {        perror("getsockname");    } else {        printf("  实际绑定地址: %s:%d\n",               inet_ntoa(actual_addr.sin_addr),               ntohs(actual_addr.sin_port));    }}
./02_no_bind_listen=== 实验2: 不bind直接listen ===✓ socket 创建成功尝试直接调用 listen()(没有先bind)...✓ listen 成功(意外,某些系统可能允许自动bind)  实际绑定地址: 0.0.0.0:31751

这个结果有点儿意外,如果没有显式调用 bind,那么在 listen 的时候会隐式随机分配一个端口。

3.3 backlog 溢出

./03_backlog_test 3 0=== 实验3: listen 的 backlog 参数 ===监听端口: 7777设置 backlog = 3注意:实际队列长度可能被系统限制(/proc/sys/net/core/somaxconn)系统 somaxconn = 16384实际 backlog = min(3, 16384) = 3✓ listen 成功!模式: 不接受连接(用于测试 backlog 溢出)服务器将只监听但不调用 accept()当连接数超过 backlog 时,新连接将被拒绝或超时

在 listen 时设置 backlog 为 3。

使用 nc 命令建立多个连接,发现第4个还是成功,到第5个就卡住了。

nc: connect to 127.0.0.1 port 7777 (tcp) failed: Connection timed out

tcpdump抓包发现,客户端在重发 SYN 包,但是服务端不响应。

19:03:37.979238 IP 127.0.0.1.64330 > 127.0.0.1.7777: Flags [S], seq 2867556772, win 43690, options [mss 65495,sackOK,TS val 2627938407 ecr 0,nop,wscale 10], length 019:03:39.041866 IP 127.0.0.1.64330 > 127.0.0.1.7777: Flags [S], seq 2867556772, win 43690, options [mss 65495,sackOK,TS val 2627939470 ecr 0,nop,wscale 10], length 019:03:41.089873 IP 127.0.0.1.64330 > 127.0.0.1.7777: Flags [S], seq 2867556772, win 43690, options [mss 65495,sackOK,TS val 2627941518 ecr 0,nop,wscale 10], length 019:03:45.121870 IP 127.0.0.1.64330 > 127.0.0.1.7777: Flags [S], seq 2867556772, win 43690, options [mss 65495,sackOK,TS val 2627945550 ecr 0,nop,wscale 10], length 0

通过 ss 命令确认服务端全连接队列已满:

ss -ltnp | grep 7777LISTEN 4      3            0.0.0.0:7777      0.0.0.0:*    users:(("03_backlog_test",pid=553353,fd=3))

这里有点儿疑问:

  • • 队列长度为 3,多出来的那个连接在哪里?
  • • 全连接队列满时,看起来就不响应建连的 SYN 包了。

4. 内核实现

带着实验中的疑问,接下来看看 Linux 内核的实现。

4.1 任务

请梳理 @net/ 目录下 bind 和 listen 两个系统调用的源码,生成报告。我有几个疑问,需要解释清楚:

  • • 不 bind 直接 listen 为什么会随机分配端口?具体的分配策略是什么?
  • • 设定全连接队列长度为 3,为什么能够接收 4 个连接?
  • • 全连接队列满时,为什么对建连的 SYN 包不再响应了?

4.2 报告

内核版本: Linux 5.15.198分析目录:net/include/net/

完成的报告在 03_bind_listen_源码分析报告.md[1],这里仅摘要关键点。

listen 调用链:

listen(sockfd, backlog)  └─> SYSCALL_DEFINE2(listen)      └─> __sys_listen()  [net/socket.c:1749]          └─> sock->ops->listen()              └─> inet_listen()  [net/ipv4/af_inet.c:196]                  └─> inet_csk_listen_start()  [net/ipv4/inet_connection_sock.c:1089]                      └─> sk->sk_prot->get_port()  // 如果没有 bind,分配端口                      └─> sk->sk_prot->hash()      // 加入 hash 表

端口分配策略 (net/ipv4/inet_connection_sock.c:194-276):

  1. 1. 使用 prandom_u32() 伪随机数生成器选择起始位置
  2. 2. 强制使用奇数端口(避免与 connect 偏好的偶数端口冲突)
  3. 3. 从随机位置开始向上扫描,步长为 2
  4. 4. 奇数端口扫描失败后尝试偶数端口
  5. 5. 对于设置了 SO_REUSEADDR 的 socket,先尝试端口范围的一半

端口范围:/proc/sys/net/ipv4/ip_local_port_range

SYN 包处理调用链:

SYN 包到达  └─> tcp_v4_rcv()  [net/ipv4/tcp_ipv4.c]      └─> tcp_v4_do_rcv()          └─> tcp_rcv_state_process()              └─> tcp_v4_conn_request()  [net/ipv4/tcp_ipv4.c:1540]                  └─> tcp_conn_request()  [net/ipv4/tcp_input.c:6948]                      ├─> 检查 1: inet_csk_reqsk_queue_is_full()  // 半连接队列                      ├─> 检查 2: sk_acceptq_is_full()            // 全连接队列                      ├─> inet_reqsk_alloc()  // 分配 request_sock                      └─> af_ops->send_synack()  // 发送 SYN-ACK

全连接队列长度为 3 能接收 4 个连接,因为判断条件是 > 而不是 >=

static inline bool sk_acceptq_is_full(const struct sock *sk){    return READ_ONCE(sk->sk_ack_backlog) > READ_ONCE(sk->sk_max_ack_backlog);}
  • • backlog=3 时,sk_max_ack_backlog = 3
  • • 队列满的条件是 sk_ack_backlog > 3
  • • 因此 sk_ack_backlog 可以取值 0, 1, 2, 3(共 4 个连接)

全连接队列满时不再响应 SYN 包,因为 tcp_conn_request() 直接丢弃 SYN:

if (sk_acceptq_is_full(sk)) {    NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);    goto drop;  // 直接丢弃,不发送 SYN-ACK}

最终 ACK 处理调用链:

ACK 包到达 (完成三次握手)  └─> tcp_v4_rcv()  [net/ipv4/tcp_ipv4.c]      └─> tcp_v4_do_rcv()          └─> tcp_check_req()  [net/ipv4/tcp_minisocks.c:656]              └─> syn_recv_sock()  [实际为 tcp_v4_syn_recv_sock()]                  ├─> 检查: sk_acceptq_is_full()  // 再次检查全连接队列                  │   └─> 如果满,返回 NULL → 跳转到 listen_overflow                  ├─> tcp_create_openreq_child()  // 创建子 socket                  └─> inet_csk_reqsk_queue_add()  [net/ipv4/inet_connection_sock.c:1150]                      └─> sk_acceptq_added()  // sk_ack_backlog++  【队列满时的处理】listen_overflow 分支:      └─> 检查 sysctl_tcp_abort_on_overflow          ├─> = 0 (默认): 静默丢弃 ACK,设置 acked=1          │   └─> 客户端会超时重传          └─> = 1: 发送 RST 拒绝连接              └─> req->rsk_ops->send_reset()              └─> 客户端立即收到 ECONNREFUSED

而在收到最终 ACK 时,行为取决于 tcp_abort_on_overflow 参数:

if (!READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_abort_on_overflow)) {    inet_rsk(req)->acked = 1;    return NULL;  // 静默丢弃 ACK,不发送 RST}embryonic_reset:if (!(flg & TCP_FLAG_RST)) {    req->rsk_ops->send_reset(sk, skb);  // 发送 RST}

行为总结:

  1. 1. 初始 SYN:无论什么情况,都是直接丢弃,不发 SYN-ACK
  2. 2. 最终 ACK:
    • • tcp_abort_on_overflow = 0 (默认):静默丢弃,客户端超时重传
    • • tcp_abort_on_overflow = 1:发送 RST,客户端立即失败
  3. 3. 这是防止队列溢出的保护机制,默认配置对流量突发更友好

5. 总结

通过与 AI 老师的讨论,我从宏观上理解了 bind 和 listen 系统调用设计的精妙,通过实验也理解了一些内核的处理细节。

但是有两个名称相似的配置项 —— SO_REUSEADDR 和 SO_REUSEPORT,我还没有理解透彻,下次再与 AI 老师讨论。


1. https://gitee.com/shichaoyuan/learn-linux-with-ai↩︎

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-11 13:12:21 HTTP/2.0 GET : https://f.mffb.com.cn/a/474943.html
  2. 运行时间 : 0.295787s [ 吞吐率:3.38req/s ] 内存消耗:4,680.77kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=f42966bd4e04fbeae67ea7fb8e1952c0
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000449s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000635s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.105866s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.004826s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000554s ]
  6. SELECT * FROM `set` [ RunTime:0.011841s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000724s ]
  8. SELECT * FROM `article` WHERE `id` = 474943 LIMIT 1 [ RunTime:0.003372s ]
  9. UPDATE `article` SET `lasttime` = 1770786741 WHERE `id` = 474943 [ RunTime:0.012491s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000702s ]
  11. SELECT * FROM `article` WHERE `id` < 474943 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.009595s ]
  12. SELECT * FROM `article` WHERE `id` > 474943 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.007139s ]
  13. SELECT * FROM `article` WHERE `id` < 474943 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.014118s ]
  14. SELECT * FROM `article` WHERE `id` < 474943 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.015290s ]
  15. SELECT * FROM `article` WHERE `id` < 474943 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.017738s ]
0.299538s