Quand un UDP sendto() bloque-t-il?

en utilisant le comportement par défaut (de blocage) sur une socket UDP, dans quel cas un appel à sendto () sera-t-il Bloqué? Je m'intéresse essentiellement au comportement de Linux.

pour TCP je comprends que le contrôle de la congestion fait le blocage de l'appel send () si la fenêtre d'envoi est pleine, mais QU'en est-il de UDP? Est-ce qu'il bloque même parfois ou laisse simplement les paquets être rejetés aux couches inférieures?

23
demandé sur Jens 2010-11-12 16:39:35

2 réponses

cela peut arriver si vous avez rempli votre tampon de socket, mais c'est dépendant fortement du système d'exploitation. Depuis UDP ne fournit aucune garantie votre système d'exploitation peut décider de faire ce qu'il veut quand votre tampon de socket est plein: bloc ou goutte. Vous pouvez essayer D'augmenter SO_SNDBUF pour un soulagement temporaire.

Cela peut s'appuient même sur le réglage de votre système, par exemple, il peut aussi dépendre de la taille de l'anneau TX dans le pilote de votre interface réseau. Il y a quelques discussions à ce sujet dans le liste de diffusion iperf, mais vous voulez vraiment discuter avec le les développeurs de votre système d'exploitation.

15
répondu MarcH 2010-11-12 14:40:01

C'est peut-être parce que votre système d'exploitation tente d'effectuer une requête ARP pour obtenir l'adresse matérielle de l'hôte distant.

Fondamentalement, chaque fois qu'un paquet va, l'en-tête requiert l'adresse IP de l'hôte distant et l'adresse MAC de l'hôte distant. 192.168.1.34 et AB: 32:24:64:F3: 21.

votre comportement de "blocage" pourrait être que L'ARP fonctionne.

j'ai entendu dans les versions plus anciennes de Windows( 2k je pense), que le 1er paquet serait parfois rejetée si la demande prend trop de temps et que vous envoyez trop de données. Un pack de service l'a probablement réparé depuis.

9
répondu mj_ 2010-11-12 14:21:40