gpt4 book ai didi

c++ - 如何使用 boost::asio 连接到 unix 域套接字?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:28 24 4
gpt4 key购买 nike

我想通过指定套接字端点的路径名来创建并连接到 SOCK_SEQPACKET 类型的 unix 域套接字,但这无法在 中编译boost::asio v1.60:

using namespace boost::asio::generic;
seq_packet_protocol proto{AF_UNIX, IPPROTO_SCTP}; // SOCK_SEQPACKET
seq_packet_protocol::socket sock(io_service, proto);
boost::asio::local::basic_endpoint<seq_packet_protocol> ep("/tmp/socket");
sock.connect(ep); // does not compile

您知道如何正确创建 unix 域套接字吗?

最佳答案

我建议保持简单:

#include <boost/asio.hpp>

int main() {
boost::asio::io_service io_service;
using boost::asio::local::stream_protocol;

stream_protocol::socket s(io_service);
s.connect("/tmp/socket");
}

毫无疑问你可以更底层,但我不确定你什么时候需要它。

更新 模仿预定义的stream_protocol,下面是定义seqpacket_protocol的方法:

Live On Coliru

namespace SeqPacket {
using namespace boost::asio::local;

struct seqpacket_protocol
{
int type() const { return IPPROTO_SCTP; }
int protocol() const { return 0; }
int family() const { return AF_UNIX; }

typedef basic_endpoint<seqpacket_protocol> endpoint;
typedef boost::asio::basic_stream_socket<seqpacket_protocol> socket;
typedef boost::asio::basic_socket_acceptor<seqpacket_protocol> acceptor;

#if !defined(BOOST_ASIO_NO_IOSTREAM)
/// The UNIX domain iostream type.
typedef boost::asio::basic_socket_iostream<seqpacket_protocol> iostream;
#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
};
}

只需以相同的模式使用它:

int main() {
boost::asio::io_service io_service;
using SeqPacket::seqpacket_protocol;

seqpacket_protocol::socket s(io_service);
s.connect("socket");
}

关于c++ - 如何使用 boost::asio 连接到 unix 域套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com