2010-03-25 1 views
0

Y a-t-il une raison pour qu'un appel de blocage à la fonction send() de winsock sur Vista soit renvoyé immédiatement? Cela fonctionne avec le délai prévu sur XP et ci-dessous. Je me demande si cela a quelque chose à voir avec la fonction d'auto-réglage de Vista. code:Y a-t-il une raison pour qu'un appel de blocage à la fonction sendock de winsock sur Vista soit renvoyé immédiatement?

char *pBuffer; // pointer to data 
    int bytes; // total size 
    int i = 0, j=0; 
    while (i < bytes) 
    { 
    j = send(m_sock, pBuffer+i, bytes-i, 0); 
     i+=j; 
    } 

Merci,
Pavan

+1

Lorsque vous dites "revenir immédiatement", voulez-vous dire sans que l'envoi se produise? La mise en mémoire tampon du noyau de l'envoi reviendrait "très vite", ce qui est différent de "immédiat". – msw

+1

Les indications d'erreur qui ne sont pas vérifiées (par exemple, mauvais m_sock) retourneraient également très rapidement. – msw

+1

Vous ne vérifiez pas les codes d'erreur, n'est-ce pas? En vérifiant que send envoie réellement toutes les données (envoyer est autorisé à diviser les données en plus petits morceaux, donc vous devrez peut-être l'appeler à plusieurs reprises) et sinon, vérifier SOCKET_ERROR et obtenir l'erreur pourrait jeter plus de lumière sur cela. –

Répondre

1

probablement le tampon en cours est plein. vérifier le code de retour de send()

2

La première possibilité est que send() a échoué et renvoyé SOCKET_ERROR. Votre code ne peut pas détecter cela, vous vraiment devrait résoudre ce problème.

La prochaine possibilité est que send() ne bloque pas. Ce qui est plutôt normal, cela ne bloquera que s'il n'y a plus d'espace tampon dans le sous-système de transport. Vous devrez pomper plusieurs mégaoctets avant que cela n'arrive.

+0

nobugz, Dans le cas de la deuxième possibilité (de tampon étant trop grand), Pensez-vous que le réglage du buffle r taille sur le socket aidera? Je vais essayer quand même :) – ivymike

+0

@ivymike: Comment ça aide à faire un bloc send()? Aide pour quoi? Tout le monde serait heureux de voir ses appels send() de ne pas bloquer! – mmmmmmmm

Questions connexes