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)
}()
}
1
MoYi123 2022-07-20 15:53:24 +08:00
如果是需要单元测试, 那么就使用 gomock 等工具
如果是需要学习, 那么可以看 accept 里的代码. |
2
pagxir 2022-07-20 16:22:46 +08:00 via Android
ctrl+c 就可以了
|
3
pagxir 2022-07-20 16:28:21 +08:00 via Android
accept 比较容易触发的简单错误是 fd 消耗完,信号中断,连接异常,设置超时,这几个。
|
4
DefoliationM 2022-07-20 16:39:13 +08:00
l.listener.Close()
|
5
aladdinding 2022-07-20 16:44:13 +08:00
too many fd
|
6
danbai 2022-07-20 17:21:27 +08:00
修改 tcp 最大连接数
|
7
Crawping 2022-07-20 17:54:28 +08:00
fd 耗尽
|
8
Misakas 2022-07-21 11:41:07 +08:00
歪个楼,有没有朋友能讲一下 fd 是哪两个单词的缩写
|
9
yingqiuQAQ 2022-07-21 11:42:31 +08:00
@Misakas 文件描述符 file descriptor
|
10
zizon 2022-07-21 12:44:45 +08:00
Accept 方法 override 一下不就完了...
random return error |
11
vczyh OP 感谢大家的回复,大体意思我明白了,我设置一下最大 fd
|