Compartilhar via


código de controle SIO_APPLY_TRANSPORT_SETTING

Descrição

O código de controle SIO_APPLY_TRANSPORT_SETTING aplica uma ou mais configurações de transporte a um soquete.

Para executar essa operação, chame a função WSAIoctl ou WSPIoctl com os parâmetros a seguir.

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

Um descritor que identifica um soquete.

Dwiocontrolcode

O código de controle para a operação. Use SIO_APPLY_TRANSPORT_SETTING para esta operação.

Lpvinbuffer

Um ponteiro para o buffer de entrada. Esse parâmetro contém um ponteiro para uma estrutura em que o primeiro membro da estrutura é uma estrutura TRANSPORT_SETTING_ID que determina qual configuração de transporte está sendo aplicada.

Cbinbuffer

O tamanho, em bytes, do buffer de entrada. Esse parâmetro depende da configuração de transporte que está sendo aplicada.

Lpvoutbuffer

Um ponteiro para o buffer de saída. Esse parâmetro depende da configuração de transporte que está sendo aplicada.

cbOutBuffer

O tamanho, em bytes, do buffer de saída.

Lpcbbytesreturned

Um ponteiro para uma variável que recebe o tamanho, em bytes, dos dados armazenados no buffer de saída.

Se o buffer de saída for muito pequeno, a chamada falhará, WSAGetLastError retornará WSAEINVAL e o parâmetro lpcbBytesReturned apontará para um valor DWORD igual a zero.

Se lpOverlapped for NULL, o valor DWORD apontado pelo parâmetro lpcbBytesReturned retornado em uma chamada bem-sucedida não poderá ser zero.

Se o parâmetro lpOverlapped não for NULL para soquetes sobrepostos, as operações que não podem ser concluídas imediatamente serão iniciadas e a conclusão será indicada posteriormente. O valor DWORD apontado pelo parâmetro lpcbBytesReturned retornado pode ser zero, pois o tamanho dos dados armazenados não pode ser determinado até que a operação sobreposta seja concluída. O status de conclusão final pode ser recuperado quando o método de conclusão apropriado é sinalizado quando a operação é concluída.

lpvOverlapped

Um ponteiro para uma estrutura WSAOVERLAPPED .

Se soquete s tiver sido criado sem o atributo sobreposto, o parâmetro lpOverlapped será ignorado.

Se s tiver sido aberto com o atributo sobreposto e o parâmetro lpOverlapped não for NULL, a operação será executada como uma operação sobreposta (assíncrona). Nesse caso, o parâmetro lpOverlapped deve apontar para uma estrutura WSAOVERLAPPED válida.

Para operações sobrepostas, a função WSAIoctl ou WSPIoctl retorna imediatamente e o método de conclusão apropriado é sinalizado quando a operação é concluída. Caso contrário, a função não retornará até que a operação seja concluída ou ocorra um erro.

Lpcompletionroutine

Tipo: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

Um ponteiro para a rotina de conclusão chamado quando a operação foi concluída (ignorado para soquetes não sobrepostos).

lpThreadId

Um ponteiro para uma estrutura WSATHREADID a ser usada pelo provedor em uma chamada subsequente para WPUQueueApc. O provedor deve armazenar a estrutura WSATHREADID referenciada (não o ponteiro para o mesmo) até que a função WPUQueueApc retorne.

Nota Esse parâmetro se aplica somente à função WSPIoctl .

Lperrno

Um ponteiro para o código de erro.

Nota Esse parâmetro se aplica somente à função WSPIoctl .

Valor retornado

Se a operação for concluída com êxito, a função WSAIoctl ou WSPIoctl retornará zero.

Se a operação falhar ou estiver pendente, a função WSAIoctl ou WSPIoctl retornará SOCKET_ERROR. Para obter informações de erro estendidas, chame WSAGetLastError.

Código do erro Significado
WSA_IO_PENDING A operação de E/S sobreposta está em andamento. Esse valor será retornado se uma operação sobreposta tiver sido iniciada com êxito e a conclusão será indicada posteriormente.
WSA_OPERATION_ABORTED A operação de E/S foi anulada devido ao encerramento de um thread ou a uma solicitação de aplicativo. Esse erro será retornado se uma operação sobreposta tiver sido cancelada devido ao fechamento do soquete ou à execução do comando IOCTL SIO_FLUSH .
WSAEFAULT O sistema detectou um endereço de ponteiro inválido ao tentar usar um argumento de ponteiro em uma chamada. Esse erro é retornado do parâmetro lpvInBuffer, lpvoutBuffer, lpcbBytesReturned, lpOverlapped ou lpCompletionRoutine não está totalmente contido em uma parte válida do espaço de endereço do usuário.
WSAEINPROGRESS Uma operação de bloqueio está atualmente em execução. Esse erro será retornado se a função for invocada quando um retorno de chamada estiver em andamento.
WSAEINTR Uma operação de bloqueio foi interrompida por uma chamada para WSACancelBlockingCall. Esse erro será retornado se uma operação de bloqueio tiver sido interrompida.
WSAEINVAL Foi fornecido um argumento inválido. Esse erro será retornado se o parâmetro dwIoControlCode não for um comando válido ou se um parâmetro de entrada especificado não for aceitável ou o comando não for aplicável ao tipo de soquete especificado.
WSAENETDOWN Uma operação de soquete encontrou uma rede inoperante. Esse erro será retornado se o subsistema de rede falhar.
WSAENOTSOCK Uma operação foi tentada em algo que não é um soquete. Esse erro será retornado se o descritor s não for um soquete.
WSAEOPNOTSUPP Não há suporte para a tentativa de operação para o tipo de objeto referenciado. Esse erro será retornado se não houver suporte para o comando IOCTL especificado. Esse erro também será retornado se o SIO_APPLY_TRANSPORT_SETTING IOCTL não tiver suporte do provedor de transporte. Esse erro também é retornado quando uma tentativa de usar o SIO_APPLY_TRANSPORT_SETTING IOCTL é feita em um soquete diferente de UDP ou TCP.

Comentários

O SIO_APPLY_TRANSPORT_SETTING IOCTL tem suporte em Windows 8 e Windows Server 2012 e versões posteriores do sistema operacional.

O SIO_APPLY_TRANSPORT_SETTING IOCTL é um IOCTL genérico usado para aplicar a configuração de transporte ao soquete. A configuração de transporte que está sendo aplicada baseia-se no TRANSPORT_SETTING_ID passado no parâmetro lpvInBuffer .

Começando com Windows 8 e Windows Server 2012, o sistema define a funcionalidade REAL_TIME_NOTIFICATION_CAPABILITY em um soquete TCP. Começando com Windows 10 e Windows Server 2016, também é definido ASSOCIATE_NAMERES_CONTEXT. Para obter mais informações, consulte addrinfoex4 e ASSOCIATE_NAMERES_CONTEXT_INPUT.

Se o TRANSPORT_SETTING_ID passado no parâmetro lpvInBuffer tiver o membro Guid definido como REAL_TIME_NOTIFICATION_CAPABILITY, essa será uma solicitação para aplicar configurações de notificação em tempo real para o soquete TCP usado com o ControlChannelTrigger para receber notificações de rede em segundo plano em um aplicativo da Windows Store. O parâmetro lpvInBuffer deve apontar para uma estrutura de REAL_TIME_NOTIFICATION_SETTING_INPUT . O parâmetro lpvOutBuffer não é usado para essa operação. Essa configuração de transporte se aplica somente a soquetes TCP. Essa configuração de transporte fornece uma maneira de WinInet ou serviços de rede semelhantes marcarem um determinado soquete TCP como ControlChannelTrigger habilitado. O Windows marcará o soquete TCP correspondente e definirá as configurações de hardware e software apropriadas quando essa opção for chamada. Um aplicativo da Windows Store não chamará esse IOCTL diretamente.

Confira também

ControlChannelTrigger

socket

SIO_QUERY_TRANSPORT_SETTING

TRANSPORT_SETTING_ID

Wsagetlasterror

Wsagetoverlappedresult

Wsaioctl

WSAOVERLAPPED

WSASocketA

WSASocketW