Question

J'ai une implémentation qui utilise ioctl (FIONREAD) pour déterminer le nombre d'octets en attente dans le tampon de réception Raw Socket sous Linux, puis appelle un recv à ce sujet.

J'ai lu quelque part que l'interface ioctl pour les sockets brutes sous Linux ne renvoie pas les octets en attente. Est-ce correct?

Je demande parce que je perds de temps en temps certains messages sur des charges lourdes et je n’ai pas encore réussi à savoir où. Est-ce un meilleur moyen de déterminer le nombre d’octets en attente dans le socket brut?

Était-ce utile?

La solution

Il est toujours possible que le noyau supprime des paquets si votre application ne peut pas suivre le débit de paquets (car la mémoire tampon du noyau n'est pas illimitée).

BTW, pourquoi avez-vous besoin de connaître le nombre d'octets de toute façon? S'agissant de sockets en paquets, la longueur d'un paquet sera toujours limitée par la taille de trame maximale de l'interface réseau. Il vous suffit donc de passer un tampon suffisamment grand pour pouvoir l'envoyer.

Cela étant dit, si les performances sont critiques, vous devez consulter PACKET_MMAP support sur Linux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top