Compartir a través de


CAsyncSocket::Send

Llame a esta función miembro para enviar los datos en un socket conectado.

virtual int Send( 
   const void* lpBuf, 
   int nBufLen, 
   int nFlags = 0  
);

Parámetros

  • lpBuf
    un búfer que contiene los datos que se transmitirán.

  • nBufLen
    la longitud de los datos en lpBuf en bytes.

  • nFlags
    Especifica la manera en que se realiza la llamada. La semántica de esta función viene determinada por las opciones de socket y el parámetro de nFlags . El último es construido combinando cualquiera de los valores siguientes con el operador de C++ OR :

    • MSG_DONTROUTE especifica que los datos no deben estar bajo el enrutamiento. Un proveedor de Windows Sockets puede elegir omitir este marcador.

    • Datos fuera de banda deMSG_OOB Send (SOCK_STREAM solo).

Valor devuelto

Si no se produce ningún error, Enviar devuelve el número total de caracteres enviado. (Observe que puede ser menor que el número indicado por nBufLen.) Si no, un valor de SOCKET_ERROR se devuelve, y un código de error específico puede recuperar llamando a GetLastError. Los errores siguientes se aplican a esta función miembro:

  • WSANOTINITIALISED A AfxSocketInit correcto debe aparecer antes de utilizar esta API.

  • La implementación de Windows Sockets deWSAENETDOWN The detectó que produjo el subsistema de la red.

  • La dirección solicitada speedWSAEACCES es una dirección de difusión, pero el marcador adecuado no se estableció.

  • La operación de Windows Sockets de bloqueo deWSAEINPROGRESS A está en curso.

  • El argumento deWSAEFAULT The lpBuf no está en una parte del espacio de direcciones del usuario.

  • La conexión deWSAENETRESET The debe ser restaurada porque la implementación de Windows Sockets la quitado.

  • Informes de implementación de Windows Sockets deWSAENOBUFS The un interbloqueo del búfer.

  • El socket deWSAENOTCONN no está conectado.

  • WSAENOTSOCK El descriptor no es un socket.

  • WSAEOPNOTSUPP   MSG_OOB se especificó, pero el socket no es de SOCK_STREAMescrito.

  • Se cierra el socket deWSAESHUTDOWN The; no es posible llamar a Enviar en un socket después de que ShutDown invocarlo con nHow establecido en 1 o 2.

  • El socket deWSAEWOULDBLOCK The se marca como sin bloquear y la operación solicitada bloquearía.

  • El socket deWSAEMSGSIZE The es de SOCK_DGRAMcon tipo, y el datagrama es mayor que el máximo admitido por la implementación de Windows Sockets.

  • El socket deWSAEINVAL no se ha enlazado con Enlazar.

  • El circuito virtual deWSAECONNABORTED The era anulado debido al tiempo de espera u otro error.

  • El circuito virtual deWSAECONNRESET Se ha restablecido por el lado remoto.

Comentarios

Enviar se utiliza para escribir datos de salida en sockets conectados de secuencia o de datagrama. Para los sockets de datagrama, se debe tener cuidado para no superar el tamaño de paquete IP máximo de las subredes subyacentes, que es especificado por el elemento de iMaxUdpDg en la estructura de WSADATA devuelta por AfxSocketInit. Si los datos es demasiado largo pasar atómico con el protocolo subyacente, el error WSAEMSGSIZE se devuelve mediante GetLastError, y no se recibe ningún dato.

Observe que para un socket de datagrama que la finalización correcta de Enviar no indica que los datos se proporcionó correctamente.

En los objetos de CAsyncSocket de SOCK_STREAMtipo, el número de bytes escritos puede estar entre 1 y la longitud solicitada, dependiendo de disponibilidad del búfer en el valor local y hospeda no nativos.

Ejemplo

Vea el ejemplo para CAsyncSocket::OnSend.

Requisitos

encabezado: afxsock.h

Vea también

Referencia

CAsyncSocket Class

Gráfico de jerarquías

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::SendTo