func startServer() { protorpc.Register(new(Arith)) protorpc.RegisterName("net.rpc.Arith", new(Arith)) var l net.Listener l, serverAddr = listenTCP() log.Println("Test RPC server listening on", serverAddr) go protorpc.Accept(l) protorpc.HandleHTTP() httpOnce.Do(startHttpServer) }
func rpcListen(network, addr string) { l, err := net.Listen(network, addr) if err != nil { log.Error("net.Listen(\"%s\", \"%s\") error(%v)", network, addr, err) panic(err) } // if process exit, then close the rpc bind defer func() { log.Info("rpc addr: \"%s\" close", addr) if err := l.Close(); err != nil { log.Error("listener.Close() error(%v)", err) } }() rpc.Accept(l) }
func rpcListen(bind string) { l, err := net.Listen("tcp", bind) if err != nil { log.Error("net.Listen(\"tcp\", \"%s\") error(%v)", bind, err) panic(err) } // if process exit, then close the rpc bind defer func() { log.Info("listen rpc: \"%s\" close", bind) if err := l.Close(); err != nil { log.Error("listener.Close() error(%v)", err) } }() rpc.Accept(l) }
func TestProtoError(t *testing.T) { if runtime.GOOS == "plan9" { t.Skip("skipping test; see http://golang.org/issue/8908") } defer func() { err := recover() if err == nil { t.Fatal("no error") } if !strings.Contains("reading body proto: wrong wireType = 2 for field C", err.(error).Error()) { t.Fatal("expected proto', got", err) } }() protorpc.Register(new(S)) listen, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { panic(err) } go protorpc.Accept(listen) client, err := protorpc.Dial("tcp", listen.Addr().String()) if err != nil { panic(err) } go client.Ping(&client) var reply Reply err = client.Call("S.Recv", nil, &reply) if err != nil { panic(err) } fmt.Printf("%#v\n", reply) client.Close() listen.Close() }