transfert entier sur une socket en C

Quel est le moyen le plus approprié pour transférer un int sur une socket en C?

Ce que je fais jusqu'à présent est:

int n = 4;
int tmp = htonl(n);
write(socket, &tmp, sizeof(tmp));

et

int tmp,n;
read(socket, &tmp, sizeof(tmp));
n = ntohl(tmp);

Cependant, l'entier reçu est parfois 0. Pas toujours, mais disons 2 fois sur 5. Il n'est jamais une autre valeur, toujours 0. Pourquoi?

Mise à JOUR: la valeur de Retour de lecture est de -1 et une erreur est:

Resource temporarily unavailable
  • avez-vous vérifier la valeur de retour de read pour voir si elle a effectivement rempli le buffer?
  • Le code snippit que vous fournissez sont correctes. Quel que soit le problème que vous rencontrez est dans le code, vous n'êtes pas à l'affichage.
  • Dans le cas lorsque " 0 " est reçu, le retour de lecture est de -1. Lorsque les entier est reçu, le retour de lecture est de 4. C'est, je suppose, ok, mais encore - comment puis-je le résoudre? :/
  • Peut-être à chercher jusqu'à ce que -1 moyens de read? Cela signifie que vous n'avez pas lu.
  • Fournir reproductible code.
  • Avez-vous mis O_NONBLOCK sur le socket? Si oui, alors cette erreur indique que les données n'était pas encore arrivé. Essayez de nouveau plus tard.
  • avec O_NONBLOCK utiliser select, sondage, epoll ou kqueue..
  • Je pense que la bonne façon serait de sondage la prise et la lecture que lorsque vous êtes sûr il y a des données sur le support disponible pour la lecture...
  • Êtes-vous à l'aide d'un socket TCP qui bloque?
  • je suis à l'aide d'un non-blocage de la socket TCP.
  • alors soit utiliser le blocage des I/O, ou sinon attendre qu'il y est à disposition des données à lire. Vous ne pouvez pas lire des données qui n'est pas encore arrivé à votre machine.
  • merci à tous, j'ai réussi à le résoudre au dernier

InformationsquelleAutor Maggie | 2012-02-04