- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 Go 1.2 并尝试在我的服务器由于输入中的 fatal error 而关闭的套接字上调用 TCPConn.SetLinger(0)。但是,我不知道该怎么做。 net.Listener.Accept() 和 TCPListener.Accept() 都返回 net.Conn,而不是 net.TCPConn。 net.Conn 没有实现 SetLinger。我尝试进行类型切换,但随后编译器提示“不可能的类型切换情况:conn(类型 net.Conn)不能具有动态类型 net.TCPConn(缺少 Close 方法)”。 net.TCPConn 怎么会缺少 Close 方法?我没有检查来源,但文档列出了一个关闭方法(以及你不能关闭什么样的连接,不管怎样?)。
似乎您无法将 net.Conn 转换为 net.TCPConn(因为没有 Close 方法),并且您无法在服务器上获得 TCPConn,因为所有 Accept() 都返回一个 net.Conn。那么我实际上如何调用 SetLinger 呢? (或者就此而言,SetKeepAlive、SetNoDelay?)
仔细观察后,似乎有一个返回 TCPListener 的 net.TCPListener.AcceptTCP(),这真的是我必须要做的吗?为什么我不能从 Accept() 获得 TCPConn?我从 net.Listen("tcp", ":4321") 开始,所以我知道它必须是下面的 TCPConn...
最佳答案
你可以使用 TCPListener.AcceptTCP()
, Accept
只需调用 AcceptTCP
并返回 *TCPConn
作为接口(interface)。
来自 http://golang.org/src/pkg/net/tcpsock_posix.go?s=7727:7771#L233
func (l *TCPListener) Accept() (Conn, error) {
c, err := l.AcceptTCP() //notice this part
if err != nil {
return nil, err
}
return c, nil
}
或者像 James 在评论中提到的那样,您可以简单地将其转换为 tcpcon := conn.(*net.TCPConn)
。
关于go - 如何调用 TCPConn.SetLinger()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24878823/
我正在使用 Go 1.2 并尝试在我的服务器由于输入中的 fatal error 而关闭的套接字上调用 TCPConn.SetLinger(0)。但是,我不知道该怎么做。 net.Listener.A
本文整理了Java中org.zeromq.ZContext.setLinger()方法的一些代码示例,展示了ZContext.setLinger()的具体用法。这些代码示例主要来源于Github/St
我是一名优秀的程序员,十分优秀!