代码拉取完成,页面将自动刷新
package utp
import (
"bufio"
"encoding/gob"
"net"
"time"
"github.com/micro/go-log"
"github.com/micro/go-micro/transport"
)
func (u *utpListener) Addr() string {
return u.l.Addr().String()
}
func (u *utpListener) Close() error {
return u.l.Close()
}
func (u *utpListener) Accept(fn func(transport.Socket)) error {
var tempDelay time.Duration
for {
c, err := u.l.Accept()
if err != nil {
if ne, ok := err.(net.Error); ok && ne.Temporary() {
if tempDelay == 0 {
tempDelay = 5 * time.Millisecond
} else {
tempDelay *= 2
}
if max := 1 * time.Second; tempDelay > max {
tempDelay = max
}
log.Logf("utp: Accept error: %v; retrying in %v\n", err, tempDelay)
time.Sleep(tempDelay)
continue
}
return err
}
encBuf := bufio.NewWriter(c)
sock := &utpSocket{
timeout: u.t,
conn: c,
encBuf: encBuf,
enc: gob.NewEncoder(encBuf),
dec: gob.NewDecoder(c),
}
go func() {
defer func() {
if r := recover(); r != nil {
sock.Close()
}
}()
fn(sock)
}()
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。