2016-05-06 37 views
5

oluşturmak ve soket bitiş noktasının yol adını belirterek tip SOCK_SEQPACKET bir unix domain socket bağlanmak istiyorum, ama bu boost::asio v1.60 içinde derlenmeyecektir: Bir unix etki alanı soketine boost :: asio ile nasıl bağlanır?

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 

düzgün bir nasıl oluşturulacağını biliyor musunuz unix alan soketi?

cevap

3

ben basit tutmak önermek:

#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"); 
} 

Hiç şüphe yok ki daha lowlevel gidebilir, ancak bu ihtiyacım olacağını zaman emin değilim.

GÜNCELLEME Taklit önceden tanımlanmış burada seqpacket_protocol tanımlamak nasıl, stream_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) 
    }; 
} 

Aynen desen kullanmak:

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

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

SEQPACKET'in ne yaptığını anlayabileceğimi görmek için biraz okuyacağım. Anladım eğer güncelleyebilirim :) – sehe

+0

Önceden belirtilen şekilde 'IPPROTO_SCTP' kullanan bir örnekle güncellendi. – sehe

+0

çok teşekkürler, ama yazarların neden seqpacket eklemediğini merak ediyorum :: local protocol set – Martin