2

I'm using gRPC to exchange messages between C++ and node.js. It works fine. But now I need to to do the same, but using a go implementation instead of node.js. I'm getting the following error when sending messages from the go client to the c++ server:

rpc error: code = Unavailable desc = error reading from server: EOF

The C++ server also crashes returning this:

terminate called after throwing an instance of 'boost::wrapexcept<boost::system::system_error>'
  what():  syntax error
Aborted (core dumped)

The message looks like this

message Gossip
{
    bytes message = 1;
    bytes validator_key = 2;
}

The C++ server connection function

void
GossipMessageImpl::ConnectAndRun(void *  overlay)
{
    std::string server_address(gRPCport);
    ServerBuilder builder;

    builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());

    builder.RegisterService(&service_);
    cq_ = builder.AddCompletionQueue();

    server_ = builder.BuildAndStart();
    JLOG(journal_.debug()) << "gRPC server listening on port " << gRPCport;
    // Proceed to the server's main loop.
    HandleRpcs(overlay);

    pthread_exit(0);
}

The go client

var conn *grpc.ClientConn
conn, err = grpc.Dial("localhost:20052", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
    log.Fatalf("did not connect: %s", err)
}
defer conn.Close()

c := pb.NewGossipMessageClient(conn)
message  := []byte("Hello")
validatorKey := []byte("World")
response, err := c.ToRippled(ctx, &pb.Gossip{Message: message, ValidatorKey: validatorKey})
if err != nil {
    log.Fatalf("Error when calling ToRippled: %s", err)
}
log.Printf("Response from server: %s", response.Stream)

My suspicion is that I am mounting the message wrongly somehow, but I cannot find out what I'm doing wrong. The error only occurs when the message is sent, so it seems to be connecting successfully.

[bonus] The working node.js client

var client = new gossip_message.GossipMessage(target, grpc.credentials.createInsecure());
console.log(Date.now(), ' | gRPC | Chanel created');
var call = client.toRippled({message: message.data, validator_key: validator_key}, function(err, stream) 
{
     if (err) 
     {
         console.log(err)
     } 
     console.log(Date.now(), ' | gRPC-Client | Message from GSub node ID: ' + validator_key + ' sent to rippled server ');
});
Flav Scheidt
  • 105
  • 5

0 Answers0