Je retrouve pas le code mais le truc c d'utiliser WSAAsyncSelect pour slectionner la socket en mode async :
WSAAsyncSelect(soc, hWnd, WM_SOCKET_SELECT, FD_ACCEPT|FD_READ|FD_WRITE|FD_CLOSE);
/* hWnd est la fenetre qui recevra les msg
WM_SOCKET_SELECT est le msg lie a la sock (defini comme WM_USER+1 par ex)
le reste ce sont les msg qui seront recu */
Maintenant qd tu feras un send ou un recv il rendra tt de suite la main et a chaque ecriture il enverra FD_WRITE et a chaque lecture il enverra un FD_READ.
A toi de gerer tout ca...
Amadeus
send et recv sont des fonctions bloquantes alors s'il envoie ou recoit un gros paquet de donnees, un transfert de fichier par ex, ca se fait pas d'un coup et le meilleur moyen de gerer ca cest les sockets asynchrones.
youdontcare
j'oublie de préciser, c'est sur recv() qu'il faut boucler. tu as peut être confondu dans ton code.
youdontcare
qu'envoies tu exactement ? send() envoie toutes les données d'un coup, pas besoin de boucler.
Amadeus
Tu poses pas une question dont la reponse n'est pas rapide! Je suppose que tes sous win alors il te faut passer par les sock asynchrones : en gros tu selectionnes une socket en ecriture , lecture et connection asynchrones et elle enverra des msg FD_READ, FD_WRITE,... que tu pourras traiter comme n'importe quel evenement win. Si g le tps et que tas la patience je te retrouvera un ptit exemple :)
antsite
Salut !
Je suis en train d'essayer de programmer en C++ les sockets.
Il y une chose que je n'arrive pas à résoudre :
je boucle plusieurs fois sur la fonction send() mais cela
n'envoie que la première fois, les autres fois, le destinataire
ne reçoit rien. Aucune erreur n'est renvoyéee par send() ou
recv().
Quelqu'un peut-il m'aider ?