Compartir a través de


PFN_WSK_SEND_TO función de devolución de llamada (wsk.h)

La función WskSendTo envía datos de datagrama a una dirección de transporte remota.

Sintaxis

PFN_WSK_SEND_TO PfnWskSendTo;

NTSTATUS PfnWskSendTo(
  [in]           PWSK_SOCKET Socket,
  [in]           PWSK_BUF Buffer,
                 ULONG Flags,
  [in, optional] PSOCKADDR RemoteAddress,
  [in]           ULONG ControlInfoLength,
  [in, optional] PCMSGHDR ControlInfo,
  [in, out]      PIRP Irp
)
{...}

Parámetros

[in] Socket

Puntero a una estructura WSK_SOCKET que especifica el objeto de socket para el socket de datagrama sobre el que se va a enviar el datagrama.

[in] Buffer

Puntero a una estructura de WSK_BUF inicializada que describe el búfer de datos que contiene el datagrama que se envía a través del socket.

Flags

Este parámetro está reservado para uso del sistema. Una aplicación WSK debe establecer este parámetro en cero.

[in, optional] RemoteAddress

Puntero a una estructura que especifica la dirección de transporte remota a la que se va a enviar el datagrama. Este puntero debe ser un puntero al tipo de estructura SOCKADDR específico que corresponde a la familia de direcciones que la aplicación WSK especificó al crear el socket.

Si la aplicación WSK ha establecido una dirección de transporte remota fija o una dirección de transporte de destino fija para el socket de datagrama, este puntero es opcional y puede ser NULL. Si es NULL, el datagrama se envía a la dirección de transporte remota fija o a la dirección de transporte de destino fija. Si no es NULL, el datagrama se envía a la dirección de transporte remota especificada.

Para obtener más información sobre cómo establecer una dirección de transporte remota fija para un socket de datagrama, consulte SIO_WSK_SET_REMOTE_ADDRESS.

Para obtener más información sobre cómo establecer una dirección de transporte de destino fija para un socket de datagrama, consulte SIO_WSK_SET_SENDTO_ADDRESS.

[in] ControlInfoLength

Número de bytes de datos en el búfer al que apunta el parámetro ControlInfo . Si no hay información de control asociada al datagrama, el parámetro ControlInfoLength debe ser cero.

[in, optional] ControlInfo

Puntero a un búfer que contiene información de control asociada al datagrama que se envía. Los datos de información de control constan de uno o varios objetos de datos de control, cada uno de los cuales comienza con una estructura CMSGHDR . Si no hay información de control asociada al datagrama, este parámetro debe ser NULL.

[in, out] Irp

Puntero a un IRP asignado por el autor de la llamada que usa el subsistema WSK para completar la operación de envío de forma asincrónica. Para obtener más información sobre el uso de IRP con funciones WSK, consulte Uso de IRP con funciones del kernel de Winsock.

Valor devuelto

WskSendTo devuelve uno de los siguientes códigos NTSTATUS:

Código devuelto Descripción
STATUS_SUCCESS
El datagrama se envió correctamente a través del socket. El IRP se completará con el estado correcto. El campo IoStatus.Information del IRP contiene el número de bytes enviados.
STATUS_PENDING
El subsistema WSK no pudo enviar el datagrama a través del socket inmediatamente. El subsistema WSK completará el IRP después de que haya enviado el datagrama sobre el socket. El estado de la operación de envío se devolverá en el campo IoStatus.Status del IRP. Si la operación se realiza correctamente, el campo IoStatus.Information del IRP contendrá el número de bytes enviados.
STATUS_FILE_FORCED_CLOSED
El socket ya no es funcional. El IRP se completará con el estado de error. La aplicación WSK debe llamar a la función WskCloseSocket para cerrar el socket lo antes posible.
Otros códigos de estado
Se produjo un error. El IRP se completará con el estado de error.

Comentarios

Si la función WskSendTo devuelve STATUS_PENDING, la cadena MDL que se describe en la estructura WSK_BUF a la que apunta el parámetro Buffer debe permanecer bloqueada en memoria hasta que se complete el IRP. Además, el búfer al que apunta el parámetro ControlInfo también debe permanecer válido hasta que se complete el IRP. Si la aplicación WSK asignó la cadena MDL o el búfer de información de control con una de las funciones ExAllocateXxx , no puede liberar la memoria con la función ExFreeXxx correspondiente hasta después de que se complete el IRP. Si la aplicación WSK asignó la cadena MDL o el búfer de información de control en la pila, no puede devolver desde la función que llama a la función WskSendTo hasta después de que se complete el IRP.

El subsistema WSK no realiza ningún almacenamiento en búfer de datos cuando envía datagramas a través de un socket. Por lo tanto, el subsistema WSK no completará una llamada a la función WskSendTo hasta que todos los datos se hayan enviado realmente.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Universal
Encabezado wsk.h (incluya Wsk.h)
IRQL <= DISPATCH_LEVEL

Consulte también

CMSGHDR

SOCKADDR

WSK_BUF

WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskReceiveFromEvent