vczyh
0.05D
V2EX  ›  Linux

如何让 TCP 出现 Accept()错误?

By vczyh at 2022 年 7 月 20 日 · 3498 次点击
	ctx := context.Background()

	for {
		conn, err := l.listener.Accept()
		if err != nil {
			// Close() was probably called.
        	// 想要走到这里,执行这行代码
			connRefuse.Add(1)
			return
		}

		acceptTime := time.Now()

		connectionID := l.connectionID
		l.connectionID++

		connCount.Add(1)
		connAccept.Add(1)

		go func() {
			if l.PreHandleFunc != nil {
				conn, err = l.PreHandleFunc(ctx, conn, connectionID)
				if err != nil {
					log.Errorf("mysql_server pre hook: %s", err)
					return
				}
			}

			l.handle(conn, connectionID, acceptTime)
		}()
	}
11 条回复  •  2022-07-25 09:39:36 +08:00
MoYi123
   1
MoYi123  
   2022 年 7 月 20 日
如果是需要单元测试, 那么就使用 gomock 等工具
如果是需要学习, 那么可以看 accept 里的代码.
pagxir
   2
pagxir  
   2022 年 7 月 20 日 via Android
ctrl+c 就可以了
pagxir
   3
pagxir  
   2022 年 7 月 20 日 via Android
accept 比较容易触发的简单错误是 fd 消耗完,信号中断,连接异常,设置超时,这几个。
DefoliationM
   4
DefoliationM  
   2022 年 7 月 20 日
l.listener.Close()
aladdinding
   5
aladdinding  
   2022 年 7 月 20 日
too many fd
danbai
   6
danbai  
PRO
   2022 年 7 月 20 日
修改 tcp 最大连接数
Crawping
   7
Crawping  
   2022 年 7 月 20 日
fd 耗尽
Misakas
   8
Misakas  
   2022 年 7 月 21 日
歪个楼,有没有朋友能讲一下 fd 是哪两个单词的缩写
yingqiuQAQ
   9
yingqiuQAQ  
   2022 年 7 月 21 日
@Misakas 文件描述符 file descriptor
zizon
   10
zizon  
   2022 年 7 月 21 日
Accept 方法 override 一下不就完了...
random return error
vczyh
   11
vczyh  
OP
   2022 年 7 月 25 日
感谢大家的回复,大体意思我明白了,我设置一下最大 fd
Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
© 2026 V2EX · 45ms · 3.9.8.5