突破具有无限循环的第三方goroutine

突破具有无限循环的第三方goroutine,go,goroutine,Go,Goroutine,我使用它来接收SNMP陷阱: 现在,让我们假设我想以编程方式突破(摘自): err:=tl.Listen(“0.0.0.0:9162”) 我最好的方法是什么 我对Golang有点陌生,没有找到打破我无法修改的goroutine(“第三方”)的方法 谢谢,简短的回答:你不能。没有办法从goroutine之外杀死goroutine(除了杀死整个程序) 详细回答:goroutine可以监听某种“终止”信号(通过通道、信号或任何其他机制)。但最终,戈罗廷必须从内部终止 查看示例中的库,似乎没有提供此功能

我使用它来接收SNMP陷阱: 现在,让我们假设我想以编程方式突破(摘自):

err:=tl.Listen(“0.0.0.0:9162”)

我最好的方法是什么

我对Golang有点陌生,没有找到打破我无法修改的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()
方法。没错!我想,有办法做到这一点。感谢可能的副本;这可能会有帮助:我想我需要补充一下。谢谢我想我需要补充一下。谢谢