CAsyncSocket::Send
Appelez la fonction membre pour envoyer des données sur un socket connecté.
virtual int Send(
const void* lpBuf,
int nBufLen,
int nFlags = 0
);
Paramètres
lpBuf
Une mémoire tampon qui contient les données à transmettre.nBufLen
La longueur des données dans lpBuf en octets.nFlags
Spécifie la façon dont l'appel est passé. La sémantique de cette fonction sont déterminées par les options de socket et le paramètre d' nFlags . Ce dernier est construit en combinant l'un des valeurs avec l'opérateur C++ OR :MSG_DONTROUTE spécifie que les données ne doivent pas être soumises au routage. Un fournisseur de Windows Sockets peut choisir d'ignorer cette balise.
MSG_OOB envoyer des données hors bande (SOCK_STREAM uniquement).
Valeur de retour
Si aucune erreur ne se produit, Envoyer retourne le nombre total de caractères envoyés. (Notez que cela peut être moins que le nombre indiqué par nBufLen.) Sinon, une valeur de SOCKET_ERROR est retournée, et le code d'erreur spécifique peut être récupéré en appelant GetLastError. Les erreurs suivantes s'appliquent à cette fonction membre :
WSANOTINITIALISED A réussi AfxSocketInit doit se produire avant d'utiliser cette API.
WSAENETDOWN que l'implémentation de Windows Sockets l'a détecté que le sous-système réseau a échoué.
WSAEACCES l'adresse demandée est une adresse de distribution, mais la balise appropriée n'a pas été définie.
WSAEINPROGRESS se bloque l'exécution de Windows Sockets est en cours.
WSAEFAULT l'argument d' lpBuf n'est pas une partie valide de l'espace d'adressage d'utilisateur.
WSAENETRESET La connexion doit être réinitialisé car l'implémentation de Windows Sockets un supprimée.
WSAENOBUFS les rapports d'implémentation de Windows Sockets un interblocage de mémoire tampon.
WSAENOTCONN le socket n'est pas connecté.
WSAENOTSOCK le modèle n'est pas un socket.
WSAEOPNOTSUPP MSG_OOB a été spécifié, mais le socket n'est pas de type SOCK_STREAM.
WSAESHUTDOWN le socket a été arrêté ; il n'est pas possible d'appeler Envoyer sur un socket après ShutDown a été appelé avec nHow affectez la valeur 1 ou 2.
WSAEWOULDBLOCK le socket est marqué comme non bloquant et l'opération demandée se bloquerait.
WSAEMSGSIZE Le socket est de type SOCK_DGRAM, et le datagramme dépasse la taille maximale pris en charge par l'implémentation de Windows Sockets.
WSAEINVAL le socket n'a pas été lié avec Liaison.
LeWSAECONNABORTED VC a été suspendu en raison de délai d'attente ou autre échec.
LeWSAECONNRESET VC a été réinitialisé par la partie distant.
Notes
Envoyer est utilisé pour écrire des données sortantes dans le flux connecté ou sockets datagramme. Pour les sockets datagramme, le il est recommandé de pour ne pas dépasser la taille maximale à en-tête pack IP des sous-réseaux sous-jacents, qui est fournie par l'élément d' iMaxUdpDg dans la structure de WSADATA retournée par AfxSocketInit. Si les données sont trop longues pour passer atomique via le protocole sous-jacent, l'erreur WSAEMSGSIZE est retournée par l'intermédiaire de GetLastError, et aucune donnée n'est transmise.
Notez que pour un socket datagramme que l'achèvement réussi de Envoyer n'indique pas si les données ont été correctement fournies.
Sur les objets d' CAsyncSocket de type SOCK_STREAM, le nombre d'octets écrits peut être comprise entre 1 et la longueur demandée, selon la disponibilité de mémoire tampon sur les variables locales et les serveurs externes.
Exemple
Consultez l'exemple pour CAsyncSocket::OnSend.
Configuration requise
Header: afxsock.h