Share via


CAsyncSocket::SendToEx

Llame a esta función miembro para enviar datos a un destino concreto (direcciones de IPv6 de identificadores).

int SendToEx(
   const void* lpBuf,
   int nBufLen,
   UINT nHostPort,
   LPCTSTR lpszHostAddress = NULL,
   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.

  • nHostPort
    El puerto que identifica la aplicación de socket.

  • lpszHostAddress
    La dirección de red de socket con el que este objeto está conectado: un nombre de equipo como “ftp.microsoft.com,” o un número dotted como “128.56.22.8”.

  • 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, SendToEx 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.

  • WSAEFAULT The lpBuf o los parámetros de lpSockAddr no forma parte del espacio de direcciones del usuario, o argumento de lpSockAddr es demasiado pequeño (menor que el tamaño de una estructura de SOCKADDR ).

  • El nombre de host deWSAEINVAL The no es válido.

  • 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 (SOCK_STREAM solo).

  • 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 SendToEx 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 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.

  • La dirección especificada speedWSAEADDRNOTAVAIL no está disponible en el equipo local.

  • Las direcciones deWSAEAFNOSUPPORT en la familia especificada no se pueden utilizar con este socket.

  • Se requiere la dirección de destino deWSAEDESTADDRREQ A.

  • Red deWSAENETUNREACH no se puede obtener acceso desde este host en este momento.

Comentarios

Este método es igual que CAsyncSocket::SendTo salvo que administra las direcciones de IPv6 así como más antiguos protocolos.

SendToEx se utiliza en datagrama o sockets de secuencia y se utiliza para escribir datos de salida en un socket.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 completa por AfxSocketInit.Si los datos es demasiado largo pasar atómico con el protocolo subyacente, se devuelve el error WSAEMSGSIZE , y no se recibe ningún dato.

Observe que la finalización correcta de SendToEx no indica que los datos se proporcionó correctamente.

SendToEx sólo se utiliza en un socket de SOCK_DGRAM para enviar un datagrama a un socket específico identificado por el parámetro de lpSockAddr .

Para enviar una difusión (en SOCK_DGRAM sólo), la dirección del parámetro de lpSockAddr debe ser construida utilizando la dirección IP especial INADDR_BROADCAST (definido en el archivo de encabezado de Windows Sockets WINSOCK.H) junto con el número de puerto deseado.o, si el parámetro de lpszHostAddress es NULL, el socket se configura para la difusión.Suele ser desaconsejable que un datagrama de difusión supera el tamaño en el que la fragmentación puede producir, que implica que la parte de datos de datagrama (excepto encabezados) no debe superar 512 bytes.

Requisitos

encabezado: afxsock.h

Vea también

Referencia

Clase de CAsyncSocket

Gráfico de jerarquía

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send