Share via


código de control de SIO_APPLY_TRANSPORT_SETTING

Descripción

El código de control SIO_APPLY_TRANSPORT_SETTING aplica una o varias opciones de transporte a un socket.

Para realizar esta operación, llame a la función WSAIoctl o WSPIoctl con los parámetros siguientes.

int WSAIoctl(
  (socket) s,             // descriptor identifying a socket
  SIO_APPLY_TRANSPORT_SETTING, // dwIoControlCode
  (LPVOID) lpvInBuffer,  // pointer to the input buffer
  (DWORD) cbInBuffer,    // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,             // pointer to the output buffer
  (DWORD) cbOutBuffer,   // size, in bytes, of the output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
);
int WSPIoctl(
  (socket) s,             // descriptor identifying a socket
  SIO_APPLY_TRANSPORT_SETTING, // dwIoControlCode
  (LPVOID) lpvInBuffer,  // pointer to the input buffer
  (DWORD) cbInBuffer,    // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,             // pointer to the output buffer
  (DWORD) cbOutBuffer,   // size, in bytes, of the output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
  (LPWSATHREADID) lpThreadId,   // a WSATHREADID structure
  (LPINT) lpErrno   // a pointer to the error code.
);

Parámetros

s

Descriptor que identifica un socket.

dwIoControlCode

Código de control de la operación. Use SIO_APPLY_TRANSPORT_SETTING para esta operación.

lpvInBuffer

Puntero al búfer de entrada. Este parámetro contiene un puntero a una estructura donde el primer miembro de la estructura es una estructura TRANSPORT_SETTING_ID que determina qué configuración de transporte se está aplicando.

cbInBuffer

Tamaño, en bytes, del búfer de entrada. Este parámetro depende de la configuración de transporte que se está aplicando.

lpvOutBuffer

Puntero al búfer de salida. Este parámetro depende de la configuración de transporte que se está aplicando.

cbOutBuffer

Tamaño, en bytes, del búfer de salida.

lpcbBytesReturned

Puntero a una variable que recibe el tamaño, en bytes, de los datos almacenados en el búfer de salida.

Si el búfer de salida es demasiado pequeño, se produce un error en la llamada, WSAGetLastError devuelve WSAEINVAL y el parámetro lpcbBytesReturned apunta a un valor DWORD de cero.

Si lpOverlapped es NULL, el valor DWORD al que apunta el parámetro lpcbBytesReturned devuelto en una llamada correcta no puede ser cero.

Si el parámetro lpOverlapped no es NULL para sockets superpuestos, las operaciones que no se pueden completar inmediatamente se iniciarán y la finalización se indicará en un momento posterior. El valor DWORD al que apunta el parámetro lpcbBytesReturned que se devuelve puede ser cero, ya que el tamaño de los datos almacenados no se puede determinar hasta que se haya completado la operación superpuesta. El estado de finalización final se puede recuperar cuando se señala el método de finalización adecuado cuando se ha completado la operación.

lpvOverlapped

Puntero a una estructura WSAOVERLAPPED .

Si el socket s se creó sin el atributo superpuesto, se omite el parámetro lpOverlapped .

Si se abrió s con el atributo superpuesto y el parámetro lpOverlapped no es NULL, la operación se realiza como una operación superpuesta (asincrónica). En este caso, el parámetro lpOverlapped debe apuntar a una estructura WSAOVERLAPPED válida.

Para las operaciones superpuestas, la función WSAIoctl o WSPIoctl devuelve inmediatamente y el método de finalización adecuado se señala cuando se ha completado la operación. De lo contrario, la función no devuelve hasta que se haya completado la operación o se produzca un error.

lpCompletionRoutine

Tipo: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

Puntero a la rutina de finalización a la que se llama cuando se ha completado la operación (se omite para sockets no superpuestos).

lpThreadId

Puntero a una estructura WSATHREADID que usará el proveedor en una llamada posterior a WPUQueueApc. El proveedor debe almacenar la estructura WSATHREADID a la que se hace referencia (no el puntero a la misma) hasta después de que la función WPUQueueApc devuelva.

Nota Este parámetro solo se aplica a la función WSPIoctl .

lpErrno

Puntero al código de error.

Nota Este parámetro solo se aplica a la función WSPIoctl .

Valor devuelto

Si la operación se completa correctamente, la función WSAIoctl o WSPIoctl devuelve cero.

Si se produce un error en la operación o está pendiente, la función WSAIoctl o WSPIoctl devuelve SOCKET_ERROR. Para obtener información de error extendida, llame a WSAGetLastError.

Código de error Significado
WSA_IO_PENDING La operación de E/S superpuesta está en curso. Este valor se devuelve si se inició correctamente una operación superpuesta y la finalización se indicará en un momento posterior.
WSA_OPERATION_ABORTED Se ha anulado la operación de E/S debido a una solicitud de la aplicación o una salida del subproceso. Este error se devuelve si se canceló una operación superpuesta debido al cierre del socket o a la ejecución del comando SIO_FLUSH IOCTL.
WSAEFAULT El sistema detectó una dirección de puntero no válida al intentar usar un argumento de puntero en una llamada. Este error se devuelve del parámetro lpvInBuffer, lpvoutBuffer, lpcbBytesReturned, lpOverlapped o lpCompletionRoutine no está totalmente incluido en una parte válida del espacio de direcciones del usuario.
WSAEINPROGRESS Se está ejecutando una operación de bloqueo actualmente. Este error se devuelve si se invoca la función cuando hay una devolución de llamada en curso.
WSAEINTR Una operación de bloqueo se interrumpió mediante una llamada a WSACancelBlockingCall. Este error se devuelve si se interrumpió una operación de bloqueo.
WSAEINVAL Se proporcionó un argumento no válido. Este error se devuelve si el parámetro dwIoControlCode no es un comando válido o un parámetro de entrada especificado no es aceptable o el comando no es aplicable al tipo de socket especificado.
WSAENETDOWN Una operación de socket encontró una red inactiva. Este error se devuelve si se ha producido un error en el subsistema de red.
WSAENOTSOCK Se intentó realizar una operación en algo que no es un socket. Este error se devuelve si el descriptor s no es un socket.
WSAEOPNOTSUPP La operación intentada no se admite para el tipo de objeto al que se hace referencia. Este error se devuelve si no se admite el comando IOCTL especificado. Este error también se devuelve si el proveedor de transporte no admite el SIO_APPLY_TRANSPORT_SETTING IOCTL. Este error también se devuelve cuando se intenta usar el SIO_APPLY_TRANSPORT_SETTING IOCTL en un socket distinto de UDP o TCP.

Comentarios

El SIO_APPLY_TRANSPORT_SETTING IOCTL se admite en Windows 8 y Windows Server 2012 y versiones posteriores del sistema operativo.

El SIO_APPLY_TRANSPORT_SETTING IOCTL es un IOCTL genérico que se usa para aplicar la configuración de transporte al socket. La configuración de transporte que se aplica se basa en el TRANSPORT_SETTING_ID pasado en el parámetro lpvInBuffer .

A partir de Windows 8 y Windows Server 2012, el sistema define la funcionalidad REAL_TIME_NOTIFICATION_CAPABILITY en un socket TCP. A partir de Windows 10 y Windows Server 2016, también se define ASSOCIATE_NAMERES_CONTEXT. Para obtener más información, vea addrinfoex4 y ASSOCIATE_NAMERES_CONTEXT_INPUT.

Si el TRANSPORT_SETTING_ID pasado en el parámetro lpvInBuffer tiene el miembro Guid establecido en REAL_TIME_NOTIFICATION_CAPABILITY, se trata de una solicitud para aplicar la configuración de notificación en tiempo real para el socket TCP usado con controlChannelTrigger para recibir notificaciones de red en segundo plano en una aplicación de la Tienda Windows. El parámetro lpvInBuffer debe apuntar a una estructura REAL_TIME_NOTIFICATION_SETTING_INPUT . El parámetro lpvOutBuffer no se usa para esta operación. Esta configuración de transporte solo se aplica a los sockets TCP. Esta configuración de transporte proporciona una manera de que WinInet o servicios de red similares marquen un socket TCP determinado como ControlChannelTrigger habilitado. Windows marcará el socket TCP correspondiente y configurará las opciones de hardware y software adecuadas cuando se llame a esta opción. Una aplicación de la Tienda Windows no llamará directamente a este IOCTL.

Consulte también

ControlChannelTrigger

socket

SIO_QUERY_TRANSPORT_SETTING

TRANSPORT_SETTING_ID

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW