草庐IT

socket_desc

全部标签

sockets - 如何与 Docker 容器建立 TCP 传出连接?

我的Go应用程序生成TLSconnectionsviatls.Dial()交换数据。从主机运行时它工作正常:但是当应用程序从Docker容器运行时,传出连接似乎不起作用。该应用程序无限期挂起。注意1:与使用dockerrun-p$(docker-machineip):2500:2500...的行为相同注意2:除了docker-machine的默认VM附带的默认设置外,VM没有额外的端口转发设置。使用Dockerfile构建Docker镜像:FROMgolang:latestRUNmkdir-p"$GOPATH/src/path/to/app"#InstalldependenciesRU

go - go语言中如何使用RTNETLINK socket监控ip地址变化

我有以下代码,应该使用RTNETLINK套接字监视网络变化。但是,当我为接口(interface)设置新IP地址时,“NewAddr”或“DelAddr”没有显示。可能是什么问题。packagemainimport("fmt""syscall")funcmain(){l,_:=ListenNetlink()for{msgs,err:=l.ReadMsgs()iferr!=nil{fmt.Println("Couldnotreadnetlink:%s",err)}for_,m:=rangemsgs{ifIsNewAddr(&m){fmt.Println("NewAddr")}ifIsDe

sockets - 从套接字读取消息时如何获取字节顺序?

我正在使用go和protocolbuffers。go程序将编码的ProtocolBuffer消息发送到连接到套接字的客户端。现在,由于ProtocolBuffer未定界,客户端不知道要从套接字读取多少数据。我计划在消息前加上消息长度,一个32位整数。所以客户端可以读取4个字节,获取长度并读取完整消息。我可以使用binary包将整数值放入字节数组。类似的东西,binary.Write(buf,binary.LittleEndian,value)现在的问题是,write需要一个字节序,接收端如何知道字节序是什么?有没有办法在不指定显式字节顺序的情况下处理这个问题?

sockets - 转到套接字 : too many open files

当我从以下代码发送请求时:req,err:=http.NewRequest("GET","my_target:",nil)iferr!=nil{panic(err)}req.Close=trueclient:=http.DefaultClientresp,err:=client.Do(req)iferr!=nil{panic(err)}deferresp.Body.Close()平均每分钟发送10个请求几个小时后,我收到此错误:socket:toomanyopenfiles如何找到这个问题的原因?我不是关闭了http.Request吗?我认为req.Close=true可以完成这项工作

sockets - 使用套接字时重用读取缓冲区

我想知道在go中重用[]byte缓冲区的正确方法。我这样声明buf:=make([]byte,1024)然后像这样使用conn,_:=net.Dial("tcp",addr)_,err=conn.read(buf)我听说声明新缓冲区效率不高,因为它涉及内存分配,我们应该重用现有缓冲区。但是,我不确定我是否可以再次传递缓冲区并将其删除,或者它可以保留部分先前的消息(特别是如果来自套接字的当前消息比prev.one短)? 最佳答案 Read方法最多读取len(buf)个字节到缓冲区并返回读取的字节数。Read方法不会修改调用者slice

sockets - 同步读取和写入到 TCP 套接字

我正在尝试与响应消息的TCP服务器通信:packagemainimport("net""log")funchandleErr(errerror){iferr!=nil{log.Fatal(err)}}funcmain(){//connecthost:="1.2.3.4:5678"conn,err:=net.Dial("tcp",host)handleErr(err)deferconn.Close()//writetosocketmessage:="Test\n"conn.Write([]byte(message))//readfromsocket//(assumeresponseis'

sockets - 使用 select 进行非阻塞读取

假设我们有以下服务器抽象(XMPP,但在这里它并不重要):typeServerstruct{AddrstringConnnet.ConntlsCon*tls.ConnR*bufio.ReaderSSLboolreaderchanstring}还有一个辅助函数来初始化它:funccreateServer(domainstring)(s*Server,errerror){conn,err:=net.Dial("tcp",domain+":5222")iferr!=nil{returnnil,err}s=&Server{domain,conn,nil,bufio.NewReader(conn

sockets - 使用 golang 将 JSON 发送到 unix 套接字

我正在尝试编写一个golang程序来通过向运行在/tmp/mpvsocket的unix套接字发出命令来控制mpv。这是我到目前为止尝试过的:funcmain(){c,err:=net.Dial("unix","/tmp/mpvsocket")iferr!=nil{panic(err)}deferc.Close()_,err=c.Write([]byte(`{"command":["quit"]}`))iferr!=nil{log.Fatal("writeerror:",err)}}这应该会导致mpv退出但没有任何反应。可以通过命令行发出此命令以获得预期的结果:echo'{"comman

sockets - 在 Golang 中,如何接收套接字绑定(bind)到特定地址/端口的多播数据包?

手头的任务是专门绑定(bind)一个套接字到地址1.0.0.2:520(分配给eth2),然后读取地址为224.0.0.9:520的多播UDP数据包。我正在尝试下面的代码,基于https://godoc.org/golang.org/x/net/ipv4不幸的是,结果是永远不会收到此调试消息:log.Printf("udpReader:recv%dbytesfrom%sto%son%s",n,cm.Src,cm.Dst,ifname)我知道eth2正在接收所需的数据包,因为我在上面运行了这个数据包嗅探器:sudotcpdump-n-ieth218:40:28.571456IP1.0.0

api - Golang - API Server 和 Socket 同时存在

我尝试制作套接字来与我的客户通信。在对我的API发出一些请求后,将创建一个套接字。这意味着,客户端连接自己(仅通过请求),但随后他加入了聊天,因此创建了一个套接字并将其链接到良好的channel。我已经使用过套接字,所以我了解它是如何工作的(C、C++、C#、Java),但是我想做的,根据我在网上看到的,我认为这是可能的,但我不明白如何用golang处理它。我创建第一个服务器:funcmain(){r:=mux.NewRouter()r.HandleFunc("/",HomeHandler)r.HandleFunc("/products",ProductsHandler)r.Handl