Hi,
    I checked with wireshark as well, by listening on loopback interface in
Linux. I also tried changing to a local IP already configured on an
internal bridge and ran wireshark on that. Nothing comes out of the client.

After instrumenting the grpc code, I traced it to the grpc function
BlockingUnaryCall(). I instrumented it as below, with the output in comments
in red. Strangely, the status value changes from 0 to 14, the function
returns 14 and the client code bails out. *What am I missing?*

template <class InputMessage, class OutputMessage>
Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod& method,
                         ClientContext* context, const InputMessage&
request,
                         OutputMessage* result) {
  . . .
  Status status = ops.SendMessage(request);
  std::cout << __FUNCTION__ << ": Error code: " << status.error_code() <<
"\n"; //status=0
  if (!status.ok()) {
    return status;
  }
  std::cout << "Calling SendInitialMetadata\n"; // NSS
  ops.SendInitialMetadata(context->send_initial_metadata_,
                          context->initial_metadata_flags());
  ops.RecvInitialMetadata(context);
  ops.RecvMessage(result);
  ops.ClientSendClose();
  ops.ClientRecvStatus(context, &status);
  std::cout << "Called ClientRecvStatus: Status= " << status.error_code()
<< "\n"; //status=0
  call.PerformOps(&ops);
  std::cout << "Checking again: Status= " << status.error_code() << "\n"; //
status=0
  if (cq.Pluck(&ops)) {
    std::cout << "cq.Pluck-ops is true, whatever that means.\n"; //This
shows in output
    if (!ops.got_message && status.ok()) {
      std::cout << __FUNCTION__ << " returning code Unimplemented\n"; //Not
in output
      return Status(StatusCode::UNIMPLEMENTED,
                    "No message returned for unary request");
    }
  } else {
    std::cout << __FUNCTION__ << " assert !status-ok\n"; //Not in output
    GPR_CODEGEN_ASSERT(!status.ok());
  }
  std::cout << "Returning Status= " << status.error_code() << "\n"; //
status=14!
  return status;
}

Thanks a lot,
Sundar

On Wed, Jun 7, 2017 at 7:52 AM, Makarand Dharmapurikar <[email protected]
> wrote:

> How about check what's happening on the network with wireshark?
>
> On Tue, Jun 6, 2017 at 3:42 PM, <[email protected]> wrote:
>
>> Pardon the newbie question. I am getting started with gRPC, and hitting a
>> basic issue where the client gets an error code for the RPC call:
>> Error code: 14 Err msg: Endpoint read failed
>>
>> TL;DR Server starts fine. Netstat shows it is listening on the port.
>> Client fails to connect to netcat on same address as well.
>>
>> The service is very simple:
>> <snip>
>> syntax = "proto3";
>>
>> service MySvc { // name edited
>>    rpc GetVersion(Version) returns (Version) {}
>> }
>>
>> message Version {
>>    int32 version = 1;
>> }
>> </snip>
>>
>> The compilation succeeds with g++ 4.8.5 and  "-Wall". The server starts
>> up fine and prints:
>> <snip>
>> I0606 16:17:24.415181976    4792 server_builder.cc:247]      Synchronous
>> server. Num CQs: 1, Min pollers: 1, Max Pollers: 2147483647, CQ timeout
>> (msec): 1000
>> Server listening on 127.0.0.1:50051
>> </snip>
>>
>> The command 'netstat -tulpn | grep ...' shows that the server is
>> listening:
>> tcp6       0      0 127.0.0.1:50051         :::*
>> LISTEN      4792/./<service-name>
>>
>> I also ran 'nc -l 127.0.0.1 50051' and executed the client binary. The
>> netcat got nothing. So, the issue seems be on the client side.
>>
>> Here is my client code:
>> <snip>
>> class MySvcClient {
>> public:
>>    MySvcClient(std::shared_ptr<Channel> channel)
>>         : stub_(MySvc::NewStub(channel)) {}
>>
>>    int GetServerVersion(int version) {
>>       Version client_version, server_version;
>>       ClientContext ctx;
>>
>>       client_version.set_version(version);
>>       Status status = stub_->GetVersion(&ctx, client_version,
>> &server_version);
>>
>>       cout << "Error code: " << status.error_code();
>>       cout << " Err msg: " << status.error_message() << endl;
>>
>>       if (status.ok()) {
>>          cout << "Server version: " << server_version.version() << endl;
>>          return server_version.version();
>>       } else {
>>          cout << "Failed to get Server version: " << endl;
>>          return -1;
>>       }
>>    }
>>
>> private:
>>    unique_ptr<MySvc::Stub> stub_;
>> };
>>
>> int main(int argc, char** argv) {
>>    MySvcClient client(grpc::CreateChannel(
>>       "127.0.0.1:50051", grpc::InsecureChannelCredentials()));
>>    int myversion = 2;
>>    int server_version = client.GetServerVersion(myversion);
>>    cout << "Server version: " << server_version << endl;
>>
>>    return 0;
>> }
>> </snip>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "grpc.io" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/grpc-io.
>> To view this discussion on the web visit https://groups.google.com/d/ms
>> gid/grpc-io/c9a2c89e-ff6a-4f78-9949-2e626bfa36bc%40googlegroups.com
>> <https://groups.google.com/d/msgid/grpc-io/c9a2c89e-ff6a-4f78-9949-2e626bfa36bc%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CAEN9geUPeaWzVoxsAFCmzSM4bLStU9wVnL-bsAQibtd2dsJC5g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to