codice di controllo SIO_TCP_INITIAL_RTO
Descrizione
Il codice di controllo SIO_TCP_INITIAL_RTO configura i parametri RTO (Initial Retransmission Timeout) in un socket.
Per eseguire questa operazione, chiamare la funzione WSAIoctl o WSPIoctl con i parametri seguenti.
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.
);
Parametri
s
Descrittore che identifica un socket.
dwIoControlCode
Codice di controllo per l'operazione. Usare SIO_TCP_INITIAL_RTO per questa operazione.
lpvInBuffer
Puntatore al buffer di input. Questo parametro contiene un puntatore al TCP_INITIAL_RTO_PARAMETERS associato al socket.
cbInBuffer
Dimensione, in byte, del buffer di input.
lpvOutBuffer
Puntatore al buffer di output. Questo parametro non è usato per questa operazione.
cbOutBuffer
Dimensione, in byte, del buffer di output. Questo parametro deve essere impostato su zero.
lpcbBytesReturned
Puntatore a una variabile che riceve le dimensioni, in byte, dei dati archiviati nel buffer di output.
Se il buffer di output è troppo piccolo, la chiamata non riesce, WSAGetLastErrorrestituisce WSAEINVAL e il parametro lpcbBytesReturned punta a un valore DWORD pari a zero.
Se lpOverlapped è NULL, il valore DWORD a cui punta il parametro lpcbBytesReturned restituito in una chiamata riuscita non può essere zero.
Se il parametro lpOverlapped non è NULL per i socket sovrapposti, le operazioni che non possono essere completate immediatamente verranno avviate e il completamento verrà indicato in un secondo momento. Il valore DWORD a cui punta il parametro lpcbBytesReturned restituito può essere zero perché le dimensioni dei dati archiviati non possono essere determinate fino al completamento dell'operazione sovrapposta. Lo stato di completamento finale può essere recuperato quando viene segnalato il metodo di completamento appropriato al termine dell'operazione.
lpvOverlapped
Puntatore a una struttura WSAOVERLAPPED .
Se socket s è stato creato senza l'attributo sovrapposto, il parametro lpOverlapped viene ignorato.
Se s è stato aperto con l'attributo sovrapposto e il parametro lpOverlapped non è NULL, l'operazione viene eseguita come operazione sovrapposta (asincrona). In questo caso, il parametro lpOverlapped deve puntare a una struttura WSAOVERLAPPED valida.
Per le operazioni sovrapposte, la funzione WSAIoctl o WSPIoctl restituisce immediatamente e il metodo di completamento appropriato viene segnalato al termine dell'operazione. In caso contrario, la funzione non restituisce finché l'operazione non è stata completata o si verifica un errore.
lpCompletionRoutine
Tipo: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE
Puntatore alla routine di completamento chiamata quando l'operazione è stata completata (ignorata per socket non sovrapposti).
lpThreadId
Puntatore a una struttura WSATHREADID da usare dal provider in una chiamata successiva a WPUQueueApc. Il provider deve archiviare la struttura WSATHREADID a cui si fa riferimento (non il puntatore allo stesso) fino a quando non viene restituita la funzione WPUQueueApc .
Nota Questo parametro si applica solo alla funzione WSPIoctl .
lpErrno
Puntatore al codice di errore.
Nota Questo parametro si applica solo alla funzione WSPIoctl .
Valore restituito
Se l'operazione viene completata correttamente, la funzione WSAIoctl o WSPIoctl restituisce zero.
Se l'operazione ha esito negativo o è in sospeso, la funzione WSAIoctl o WSPIoctl restituisce SOCKET_ERROR. Per ottenere informazioni estese sull'errore, chiamare WSAGetLastError.
Codice di errore | Significato |
---|---|
WSA_IO_PENDING | L'operazione di I/O sovrapposta è in corso. Questo valore viene restituito se un'operazione sovrapposta è stata avviata correttamente e il completamento verrà indicato in un secondo momento. |
WSA_OPERATION_ABORTED | Operazione di I/O annullata per uscita da un thread o su richiesta di un'applicazione. Questo errore viene restituito se un'operazione sovrapposta è stata annullata a causa della chiusura del socket o dell'esecuzione del comando IOCTL SIO_FLUSH . |
WSAEACCES | È stato effettuato un tentativo di accesso a un socket in modo non consentito dalle autorizzazioni di accesso. Questo errore viene restituito in diverse condizioni che includono quanto segue: l'utente non dispone dei privilegi amministrativi necessari nel computer locale o l'applicazione non è in esecuzione in una shell avanzata come amministratore predefinito (RunAs administrator ). |
WSAEFAULT | Il sistema ha rilevato un indirizzo puntatore non valido nel tentativo di usare un argomento puntatore in una chiamata. Questo errore viene restituito del parametro lpvInBuffer, lpvoutBuffer, lpcbBytesReturned, lpOverlapped o lpCompletionRoutine non è completamente contenuto in una parte valida dello spazio indirizzi utente. |
WSAEINPROGRESS | È in corso un'operazione di blocco. Questo errore viene restituito se la funzione viene richiamata quando è in corso un callback. |
WSAEINTR | Un'operazione di blocco è stata interrotta da una chiamata a WSACancelBlockingCall. Questo errore viene restituito se un'operazione di blocco è stata interrotta. |
WSAEINVAL | Argomento fornito non valido. Questo errore viene restituito se il parametro dwIoControlCode non è un comando valido o un parametro di input specificato non è accettabile oppure il comando non è applicabile al tipo di socket specificato. |
WSAENETDOWN | Rete inattiva rilevata durante l'operazione del socket. Questo errore viene restituito se il sottosistema di rete non è riuscito. |
WSAENOTSOCK | È stata tentata un'operazione su un elemento che non è un socket. Questo errore viene restituito se il descrittore s non è un socket. |
WSAEOPNOTSUPP | L'operazione tentata non è supportata per il tipo di oggetto a cui si fa riferimento. Questo errore viene restituito se il comando IOCTL specificato non è supportato. Questo errore viene restituito anche se il SIO_TCP_INITIAL_RTO IOCTL non è supportato dal provider di trasporto. |
Commenti
Un'applicazione può usare il SIO_TCP_INITIAL_RTO IOCTL per controllare le caratteristiche di ritrasmissione iniziale (SYN/SYN+ACK) di un socket TCP, se necessario. Un'applicazione, se si usa questa opzione, deve fornire valori appropriati prima di avviare un tentativo di connessione TCP sul socket.
Il TCP_INITIAL_RTO_PARAMETERS IOCTL consente a un'applicazione di configurare il timeout di ritrasmissione iniziale (SYN) usato dal socket.
Un puntatore a una struttura TCP_INITIAL_RTO_PARAMETERS passata nel parametro lpvInBuffer consente a un'applicazione di configurare il tempo di round trip iniziale (RTT) usato per calcolare il timeout di ritrasmissione. L'applicazione può anche configurare il numero di ritrasmissioni che verranno tentate prima che il tentativo di connessione non riesca.