2010-10-16 5 views
0

Pourquoi socket_base n'a-t-il pas de méthode send()? Fondamentalement, je voudrais utiliser les sockets de boost :: asio comme des descripteurs de socket linux: que le socket sous-jacent soit UDP ou TCP, peu importe, vous pouvez appeler read(), write(), sendto(), etc ... sur eux.Envoyer des données avec boost :: asio :: socket_base

Existe-t-il une solution plus appropriée que d'écrire simplement une classe wrapper autour des classes de socket ucp & d'asio?

Répondre

2

Vous devez utiliser un de type particulier de prise, comme boost::asio::ip::tcp::socket, qui est une socket TCP basée sur les flux, ou boost::asio::ip::udp::socket, qui est pour les datagrammes. La classe socket_base est simplement une classe de base qui stocke des fonctionnalités communes. Les classes de socket réelles contiennent toutes les fonctions de transfert que vous recherchez, comme les fonctions d'envoi et de réception.

Comme vous pouvez le voir dans le documentation, chaque type de socket dispose des fonctions send et receive.

+0

Oui, mais je voudrais faire abstraction du type de socket pour ne pas avoir à écrire deux ensembles de fonctions (une pour les sockets UDP et une pour TCP). Par exemple, sous Linux, je peux envoyer (socket_descriptor, buf, len, flags) et cela fonctionnera pour UDP et TCP. – user465189

+0

Boost.ASIO n'utilise pas les fonctions virtuelles de cette manière, vous devrez donc utiliser des templates pour pouvoir écrire une fonction qui prend n'importe quel type de socket en paramètre –

Questions connexes