golangはunixドメイン通信のechoテストプログラムを採用する

1360 ワード

golangはunixドメインを通じて他のプロセスとプロセス間の通信を完了することができ、エコーテストdemoは以下のようにします.
package main

import (
	"fmt"
	"net"
	"bufio"
	"os"
)

func writeUnix(listener *net.UnixConn,dstAddr *net.UnixAddr) {
	for {
		bio := bufio.NewReader(os.Stdin)
		buf,_,_:= bio.ReadLine()
		_, err := listener.WriteToUnix(buf, dstAddr)
		checkError(err)
	}
}

func readUnix(listener *net.UnixConn) {
	for {
		buf :=make([]byte, 1400)
		size, remote, err := listener.ReadFromUnix(buf)
		checkError(err)
		fmt.Println("recv:", string(buf[:size]), " from ", remote.String())
	}
}
func checkError(err error) {
	if err != nil {
		fmt.Printf("Error: %s
", err.Error()) os.Exit(1) } } func runUnix() { addr, err := net.ResolveUnixAddr("unixgram", "/tmp/unix_gram_sock2") checkError(err) listener, err := net.ListenUnixgram("unixgram", addr) defer listener.Close() checkError(err) //send to its subs go readUnix(listener) go writeUnix(listener,addr) select{} } func main(){ runUnix() }

コアapiはListenUnixgram,ReadFromUnix,WriteToUnixである.従来のUDPのapiと同様に、プロセス間通信に適用する、UDPのように柔軟な設計インタフェースであり、接続されていない、同時にclientとserverの2つのアドレスが必要であり、データの受信が容易である.
「/tmp/unix_gram_sock 2」の内部socketにより、unixドメイン内の通信であるため、パケット損失の問題を考慮することなく、他のプロセスと効率的に通信することができる.UDP通信であるため、パックとハーフパックの問題は考慮する必要がない.