go - 如何在 DialTCP 函数上设置截止日期并处理超时错误
问题描述
我正在创建与服务器的 TCP 连接,但我需要指定超时。
我怎样才能做到这一点?
这是简化的代码:
tcpserveraddr, err := net.ResolveTCPAddr("tcp", Serveraddr+":"+Serverport)
if err != nil {
log.Printf("error during address relolution: %v\n", err)
}
serversocket, err := net.DialTCP("tcp", nil, tcpserveraddr)
if err != nil {
log.Printf("error during serversocket.DialTCP(): %v\n", err)
}
解决方案
最直接的选择是使用net.DialTimeout()
:
net.DialTimeout(tcpserveraddr.Network(), tcpserveraddr.String(), 5*time.Second)
您还可以创建一个net.Dialer
,它可以让您更好地控制拨号选项,然后DialContext()
与您自己的上下文一起使用(带超时):
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
var d net.Dialer
d.DialContext(ctx, tcpserveraddr.Network(), tcpserveraddr.String())
推荐阅读
- join - 雄辩的在连接子句中获取最新的原始数据
- php - 在程序 WordPress 插件中使用 WP_Session_Tokens 类
- c# - 远程调试 - 当前上下文中不存在变量
- javascript - 如何通过 DOM 访问函数?
- python - Python webscraping find_all("a") 在特定的类
- c# - 表单中的两个 HTML DATETIME 字段。结束时间/日期必须大于开始时间/日期
- java - Listview 搜索过滤结果不正确
- java - 如何使用 Angular 6 绕过跨源错误(Firefox CORS 错误、Chrome 预检错误)
- c# - 使用不同的程序集构建控制台应用程序
- loops - Python 3 战斗模拟