SIO_TCP_INITIAL_RTO código de control
Descripción
El código de control SIO_TCP_INITIAL_RTO configura los parámetros de tiempo de espera de retransmisión inicial (RTO) en 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_TCP_INITIAL_RTO, // dwIoControlCode
(LPVOID) lpvInBuffer, // pointer to a TCP_INITIAL_RTO_PARAMETERS structure
(DWORD) cbInBuffer, // size, in bytes, of the input buffer
(LPVOID) lpvOutBuffer, // pointer to output buffer
(DWORD) cbOutBuffer, // size of 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_TCP_INITIAL_RTO, // dwIoControlCode
(LPVOID) lpvInBuffer, // pointer to a TCP_INITIAL_RTO_PARAMETERS structure
(DWORD) cbInBuffer, // size, in bytes, of the input buffer
(LPVOID) lpvOutBuffer, // pointer to output buffer
(DWORD) cbOutBuffer, // size of 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 para la operación. Use SIO_TCP_INITIAL_RTO para esta operación.
lpvInBuffer
Puntero al búfer de entrada. Este parámetro contiene un puntero al TCP_INITIAL_RTO_PARAMETERS asociado al socket.
cbInBuffer
Tamaño, en bytes, del búfer de entrada.
lpvOutBuffer
Puntero al búfer de salida. Este parámetro no se usa para esta operación.
cbOutBuffer
Tamaño, en bytes, del búfer de salida. Este parámetro debe establecerse en cero.
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 que se devuelve 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á más adelante. El valor DWORD al que apunta el parámetro lpcbBytesReturned devuelto 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 se creó sin el atributo superpuesto, se omite el parámetro lpOverlapped .
Si se abrió 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.
En el caso de 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 va a 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 que se devuelva la función WPUQueueApc .
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. |
WSAEACCES | Se intentó acceder a un socket de una manera prohibida por sus permisos de acceso. Este error se devuelve en varias condiciones que incluyen lo siguiente: el usuario carece de los privilegios administrativos necesarios en el equipo local o la aplicación no se ejecuta en un shell mejorado como administrador integrado (RunAs administrator ). |
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 si 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_TCP_INITIAL_RTO IOCTL. |
Comentarios
Una aplicación puede usar el SIO_TCP_INITIAL_RTO IOCTL para controlar las características de retransmisión iniciales (SYN/SYN+ACK) de un socket TCP si es necesario. Una aplicación, si usa esta opción, debe proporcionar valores adecuados antes de iniciar un intento de conexión TCP en el socket.
El TCP_INITIAL_RTO_PARAMETERS IOCTL permite a una aplicación configurar el tiempo de espera de retransmisión inicial (SYN) usado por el socket.
Un puntero a una estructura de TCP_INITIAL_RTO_PARAMETERS pasada en el parámetro lpvInBuffer permite a una aplicación configurar el tiempo de ida y vuelta inicial (RTT) usado para calcular el tiempo de espera de retransmisión. La aplicación también puede configurar el número de retransmisiones que se intentarán antes de que se produzca un error en el intento de conexión.