Si la socket TCP est configurée en mode non bloquant et qu'un tampon d'envoi de la socket est défini initialement, alors send est utilisé dans une boucle pour envoyer toutes les données. Si l'envoi échoue à cause de l'erreur EAGAIN, peut-on augmenter le tampon d'envoi de la socket ? J'utilise le système d'exploitation Linux. Je voulais savoir si le redimensionnement de la taille du tampon d'envoi est autorisé ou non. Sur tcp man page "Sur les connexions individuelles, la taille du tampon de la socket doit être définie avant les appels listen(2) ou connect(2) pour qu'elle soit prise en compte." C'est pourquoi la question s'est posée
Réponses
Trop de publicités?Vous pouvez essayer tun tun tun tun tun tun tun tun tun tun tun tun tun tun tun tun tun tun tun tun tun tun mais ce n'est probablement pas une bonne idée. Le problème peut se produire quelle que soit la taille du tampon que vous avez, vous devez donc coder pour gérer ce cas.
Il s'agirait d'un détail d'implémentation de la pile réseau du noyau, c'est-à-dire du système d'exploitation que vous utilisez (que vous n'indiquez pas). Je crois que vous pouvez le faire sur la plupart des systèmes d'exploitation modernes puisqu'il s'agit simplement d'un nombre limitant la mémoire dédiée à un socket donné, mais c'est une manière totalement erronée d'aborder le problème car :
- Vous ne pouvez pas augmenter indéfiniment la taille du tampon d'envoi, le système d'exploitation la plafonnera à un moment donné.
- Le TCP vous fournit contrôle du débit - le récepteur lent ralentit l'expéditeur rapide - et c'est une avantage de TCP est liée à sa fiabilité, donc si le récepteur ne consomme pas les données assez rapidement, le fait d'envoyer plus de données dans la mémoire du noyau n'améliore en rien la situation.
- Vous êtes simplement paresseux et vous voulez que le noyau fasse tout le travail de mise en mémoire tampon pour vous.
Déterminez vos besoins en mémoire pour les rafales de trafic, la taille des tampons d'envoi des sockets, les tampons du côté de l'application.