突破具有无限循环的第三方goroutine
我使用它来接收SNMP陷阱: 现在,让我们假设我想以编程方式突破(摘自): err:=tl.Listen(“0.0.0.0:9162”) 我最好的方法是什么 我对Golang有点陌生,没有找到打破我无法修改的goroutine(“第三方”)的方法突破具有无限循环的第三方goroutine,go,goroutine,Go,Goroutine,我使用它来接收SNMP陷阱: 现在,让我们假设我想以编程方式突破(摘自): err:=tl.Listen(“0.0.0.0:9162”) 我最好的方法是什么 我对Golang有点陌生,没有找到打破我无法修改的goroutine(“第三方”)的方法 谢谢,简短的回答:你不能。没有办法从goroutine之外杀死goroutine(除了杀死整个程序) 详细回答:goroutine可以监听某种“终止”信号(通过通道、信号或任何其他机制)。但最终,戈罗廷必须从内部终止 查看示例中的库,似乎没有提供此功能
谢谢,简短的回答:你不能。没有办法从goroutine之外杀死goroutine(除了杀死整个程序) 详细回答:goroutine可以监听某种“终止”信号(通过通道、信号或任何其他机制)。但最终,戈罗廷必须从内部终止
查看示例中的库,似乎没有提供此功能。简短回答:您不能。没有办法从goroutine之外杀死goroutine(除了杀死整个程序) 详细回答:goroutine可以监听某种“终止”信号(通过通道、信号或任何其他机制)。但最终,戈罗廷必须从内部终止 查看示例中的库,似乎没有提供此功能。标准界面提供了特殊方法
setDailate
(以及setReadDailate
和SetWriteDeadline
)来设置陈旧连接的硬连接中断时间。正如我在代码中看到的:
net.Conn
接口已导出-因此您可以尝试直接访问它以设置截止日期
type TrapListener struct {
OnNewTrap func(s *SnmpPacket, u *net.UDPAddr)
Params *GoSNMP
...
}
反过来,TrapListener
导出GoSNMP
struct,以便您可以访问它。试试这个:
tl := TrapListener{...}
tl.Params.Conn.SetDeadline(time.Now().Add(1*time.Second))
tl.Listen(...)
但是,使我不安全-看起来它不使用存储连接及其选项:
func (t *TrapListener) Listen(addr string) (err error) {
...
conn, err := net.ListenUDP("udp", udpAddr)
....
}
但您可以尝试:)标准界面提供了特殊的方法setDailate
(以及setReadDailate
和SetWriteDeadline
)来设置陈旧连接的硬连接中断时间。正如我在代码中看到的:
net.Conn
接口已导出-因此您可以尝试直接访问它以设置截止日期
type TrapListener struct {
OnNewTrap func(s *SnmpPacket, u *net.UDPAddr)
Params *GoSNMP
...
}
反过来,TrapListener
导出GoSNMP
struct,以便您可以访问它。试试这个:
tl := TrapListener{...}
tl.Params.Conn.SetDeadline(time.Now().Add(1*time.Second))
tl.Listen(...)
但是,使我不安全-看起来它不使用存储连接及其选项:
func (t *TrapListener) Listen(addr string) (err error) {
...
conn, err := net.ListenUDP("udp", udpAddr)
....
}
但您可以尝试:)通过快速检查,您似乎无法做到这一点
TrapListener
应该公开一个关闭底层网络侦听器的Close()
或Shutdown()
方法。没错!我想,有办法做到这一点。感谢可能的副本;而且,这可能会有所帮助:从快速检查来看,你似乎不能TrapListener
应该公开一个关闭底层网络侦听器的Close()
或Shutdown()
方法。没错!我想,有办法做到这一点。感谢可能的副本;这可能会有帮助:我想我需要补充一下。谢谢我想我需要补充一下。谢谢