go - 如何解决直径连接错误:使用封闭的网络连接?

标签 go tcp diameter-protocol

我将go-diameter用作尝试连接服务器的客户端。我按照仓库中的示例进行操作,但是发现在连接中发生了一些错误。这是我的示例代码:

cfg := &sm.Settings{
    OriginHost:       datatype.DiameterIdentity(originHost),
    OriginRealm:      datatype.DiameterIdentity(originRealm),
    VendorID:         diameterVendorID,
    ProductName:      productName,
    FirmwareRevision: firmwareRevision,
    HostIPAddresses:  []datatype.Address{
        datatype.Address(net.ParseIP(viper.GetString("my.ip"))),
    },
}

// Create the state machine (it's a diam.ServeMux) and client.
mux := sm.New(cfg)
// CER -> for sending
cli := &sm.Client{
    Dict:               dict.Default,
    Handler:            mux,
    MaxRetransmits:     3,
    RetransmitInterval: time.Second,
    EnableWatchdog:     true,
    WatchdogInterval:   5 * time.Second,

    AuthApplicationID: []*diam.AVP{
        // Advertise support for credit control application
        diam.NewAVP(avp.AuthApplicationID, avp.Mbit, 0, datatype.Unsigned32(diameterAuthAppID)), // RFC 4006
    },
}

mux.Handle(diam.CCA, handleCCA())
mux.Handle(diam.DPA, handleDPA())

// Print error reports.
go printErrors(ctx, mux.ErrorReports())

println("diameter connect....")
connect := func() (diam.Conn, error) {
    
    /*I test these two ways, both return same error*/
    return cli.DialTimeout(addr, 5*time.Second)
    //return dial(cli, addr, "", "","tcp", false)
}
c, err := connect()
if err != nil {
    println(err)
}
该代码就像go-diameter repo上的示例客户端代码一样,但是我会得到如下错误:
diameter connect....    
diameter error on x.x.x.x:3868: read tcp x.x.x.x:60766-\u003ex.x.x.x:3868: use of closed network connection
谢谢您有什么建议。谢谢。

最佳答案

由我自己回答。我发现错误发生在网络超时。延长超时后,连接正常。

关于go - 如何解决直径连接错误:使用封闭的网络连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62946432/

相关文章:

authentication - 什么是直径协议(protocol)?

golang 将 args(一段字符串)作为 "args ... interface{}"传递

Java:如何在 "regular"TCP Socket和SSLSocket之间进行抽象

diameter-protocol - 如何使用 freediameter 为直径信用控制应用程序配置和启动直径客户端和服务器

C++套接字设计

c#-4.0 - SslStream TcpClient - 从传输流中收到意外的 EOF 或 0 字节

直径 : support for different AVP dictionary for different network provider (i. e.爱立信、诺基亚)和不同的节点(即 GGSN、Tango)

go - 生成具有特定公共(public)指数的 RSA key

go - 尝试将键盘输入写入 Golang 中的文件

go - 错误接口(interface)的使用方法