J'ai un boost::asio::ip::tcp::socket
et je veux déterminer si le socket contient des données qui sont disponibles à lire. Je lis à propos de available()
, mais cette fonction renvoie parfois aussi 0
s'il y a des données disponibles (dans le cas où il peut être lu sans blocage). L'exécutable s'exécute sous Ubuntu - un appel système peut-être utile?Déterminer la quantité d'octets disponibles dans le socket
1
A
Répondre
2
Puisque vous avez juste besoin de savoir si le socket contient des données lisibles, il suffit d'émettre votre read
non-bloquant à partir du socket. S'il y a des données, vous devez les lire quand même, alors essayez simplement la lecture.
Si vous essayez d'éviter le coût d'un read
s'il n'y a rien à lire, sachez que vous venez d'ajouter une opération supplémentaire. Vérifier s'il y a des données à lire n'est pas beaucoup moins cher que d'essayer de lire.
Bien sûr, il suffit d'avoir un async_read
en attente. Cela permet au réacteur de Boost de faire son travail.
Si aucune donnée n'est disponible pour une lecture, je continuerai et reviendrai plus tard. Je sais que async_read résoudrait cela aussi, mais j'ai déjà une grosse boucle d'interrogation donc ce serait parfait s'il y avait un moyen simple de vérifier les octets disponibles. – Bobface
Au Downvoter: Pourquoi avez-vous downvote? Puis-je ajouter des informations plus importantes? – Bobface
Comme vous l'avez dit, j'ai tout besoin de savoir si une socket contient des données lisibles. Y a-t-il une fonction pour le faire? – Bobface