3

Boost.Asio でデータグラム Unix ソケットを使用している同期クライアント コードでデータを受信するのに苦労しています。

netcatでサーバーに接続するとデータを受信するため、サーバーは正常に動作しているようです。ただし、以下のコードを試すと、 receive_from() でスタックします。straceは receive_from() システム コールが呼び出されたが何も受信されていないことを示していますが、サーバー上のstraceはクライアントにデータを送信しようとしているが失敗していることを示しています。

boost::asio::io_service io_service;

boost::asio::local::datagram_protocol::socket socket(io_service);
socket.open();

cmd::cmd cmd;
cmd.type = cmd::cmdtype::request;
cmd.id = cmd::cmdid::dumptop;

boost::asio::local::datagram_protocol::endpoint receiver_endpoint("socket.unix");

/* The server receives this data successfully */
socket.send_to(
    boost::asio::buffer(reinterpret_cast<char*>(&cmd), 
    sizeof(cmd)),
    receiver_endpoint
);

boost::array<char, 128> recv_buf;
boost::asio::local::datagram_protocol::endpoint ep;

/* When the server sends data, nothing is received here.
   Maybe it's an issue with the endpoint??? */
size_t len = socket.receive_from(
    boost::asio::buffer(recv_buf), ep);
4

1 に答える 1