2016-05-06 2 views
5

Ich möchte einen unix domain socket vom Typ SOCK_SEQPACKET durch Angabe der Pfadname des Socketendpunkt erstellen und zu verbinden, aber dies nicht in boost::asio v1.60 kompilieren:Wie kann ich mit boost :: asio eine Verbindung zu einem Unix-Domain-Socket herstellen?

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 

wissen Sie, wie man richtig eine erstellen Unix-Domain-Socket?

Antwort

3

Ich schlage vor, es einfach zu halten:

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

Kein Zweifel, können Sie mehr lowlevel gehen, aber ich bin nicht sicher, wenn Sie das brauchen würde.

UPDATE Imitieren der vordefinierten stream_protocol, hier ist, wie seqpacket_protocol zu definieren:

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

Gerade in dem gleichen Muster verwenden:

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

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

Ich werde ein wenig nachlesen, um zu sehen, ob ich verstehen kann, was das SEQPACKET macht. Ich kann aktualisieren, wenn ich es bekomme :) – sehe

+0

Aktualisiert mit einem Beispiel, das 'IPPROTO_SCTP' verwendet, wie vorgeschrieben. – sehe

+0

Vielen Dank, aber ich frage mich, warum die Autoren seqpacket nicht zum lokalen Protokollsatz – Martin

Verwandte Themen