harddisk
Messages postés54Date d'inscriptionvendredi 28 décembre 2001StatutMembreDernière intervention13 mai 2007
-
2 avril 2007 à 19:39
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 2012
-
3 avril 2007 à 01:14
Hello,
j'ai lu un peu partout que le recv est bloquant, hors chez moi ca n'est pas le cas.
harddisk
Messages postés54Date d'inscriptionvendredi 28 décembre 2001StatutMembreDernière intervention13 mai 2007 2 avril 2007 à 22:25
Merci!
Juste une question, quand tu dis "pas connecté" ca veut dire que sock est lié à rien du tout? Pas qu'il faille faire un connect() en plus du accept ?
Le coup du val ca marche,au effet de bord prets: mon buffer de reception est plus gros que celui effectivement envoyé donc les caractère à la fin de buffer sont faux(je sens que je vais devoir verifier la fin de chaine "à la main", ou réussir à faire envoyer des string par le socket...)
Et si j'ai bien compris en fait, le val est un descripteur de socket, qui fait reference à un socket créé quelquepart auquel je n'ai pas "access" comme la structure sock, mais ca me suffit pour les send/recv?
Et mon socket sock, n'a pas été modifié, je peut le réutiliser derrière?
Désolé pour le nombre de question, mais quand ca marche, j'aime bien comprendre a peu pres les implications, car au debut j'avais pas du tout compris les socket dans ce sens.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 3 avril 2007 à 01:14
Salut,
- sock n'est pas lié a rien du tout puisqu'il est lié a une adresse locale (en l'occurence, l'adresse 127.0.0.1:6969).
Un socket connecté est quant a lui lié a une adresse locale et une
adresse distante (sinon on pourrait pas vraiment parler de
'connexion'). Pour savoir quelles sont les adresses locales et
distantes d'un socket, tu as deux fonctions: getsockname et
getpeername, respectivement.
- l'effet de bord que tu décris n'en est pas un: lorsque tu envoies ta
chaine tu envoies strlen() octet, c'est a dire que tu n'envoies pas le
'\0' final de ta chaine, et donc quand tu essayes de l'afficher a
l'autre bout... boom.
- val est un socket au meme titre que sock, tu peux utiliser toutes les fonctions: send, recv, getsockname, getsockopt...
- ton sock n'a pas été modifié, mais il est lié (bind) et en mode
écoute (listen), donc tout ce que tu peux faire maintenant c'est soit
re-accepter des connexions, soit le fermer.
et un petit conseil pour la route, oublie le tuto de theWalrus.