Compartilhar via


Usando funções de kernel winsock versus funções de retorno de chamada de evento

Para determinadas operações de soquete, um aplicativo WSK (Winsock Kernel) pode chamar uma das funções do WSK do soquete para executar a operação ou implementar e habilitar uma função de retorno de chamada de evento no soquete que o subsistema WSK chama quando o evento associado à operação ocorre. Por exemplo, ao receber dados em um soquete orientado à conexão, um aplicativo WSK pode fazer chamadas para a função WskReceive do soquete ou implementar e habilitar uma função de retorno de chamada de evento WskReceiveEvent no soquete. Os requisitos de um aplicativo WSK determinam qual método o aplicativo deve usar. Exemplos de como usar ambos os métodos são fornecidos em toda a documentação do WSK.

As listas a seguir resumem alguns pontos-chave para cada método.

Usando funções de kernel winsock

  • O aplicativo WSK conduz as operações de soquete, o que significa que o aplicativo WSK controla quando as operações de soquete ocorrem. Isso pode simplificar a sincronização exigida pelo aplicativo WSK.

  • O aplicativo WSK fornece IRPs para as funções de soquete. Esses IRPs são enfileirados pelo subsistema WSK até que a operação de soquete seja concluída. Para obter mais informações sobre como usar IRPs com funções WSK, consulte Usando IRPs com funções de kernel Winsock.

  • O aplicativo WSK pode executar operações de soquete de bloqueio aguardando o IRP para que cada operação seja concluída pelo subsistema WSK.

  • O aplicativo WSK pode precisar manter várias operações de soquete enfileiradas em algumas situações para garantir a transferência de dados de alto desempenho em soquetes orientados à conexão, para impedir que os datagramas de entrada sejam descartados em soquetes de datagrama ou para impedir que conexões de entrada sejam descartadas em soquetes de escuta.

  • O aplicativo WSK fornece os buffers de dados para as operações de transferência de dados. Isso reduz o número de vezes que os dados podem precisar ser copiados. No entanto, se um aplicativo WSK mantiver várias operações de transferência de dados enfileiradas, o aplicativo deverá fornecer buffers de dados para o subsistema WSK para cada operação de transferência de dados na fila. Portanto, o aplicativo WSK pode exigir recursos de memória adicionais.

Usando funções de retorno de chamada de evento

  • O subsistema WSK conduz as operações de soquete, o que significa que o subsistema WSK notifica o aplicativo WSK dos eventos do soquete chamando as funções de retorno de chamada de evento do soquete. O aplicativo WSK pode exigir uma sincronização mais complexa para lidar com a natureza assíncrona das funções de retorno de chamada de evento.

  • O aplicativo WSK não usa IRPs para as operações de soquete.

  • O aplicativo WSK não precisa enfileirar operações de soquete. O subsistema WSK chama as funções de retorno de chamada de evento do aplicativo WSK assim que os eventos do soquete ocorrem. Se o aplicativo WSK puder acompanhar a taxa que as funções de retorno de chamada de evento de um soquete são chamadas, o uso de funções de retorno de chamada de evento poderá fornecer o maior desempenho e a menor chance de descartar datagramas ou conexões de entrada.

  • O subsistema WSK fornece os buffers de dados para operações de transferência de dados. O aplicativo WSK deve liberar esses buffers de dados de volta para o subsistema WSK imediatamente ou dentro de um período razoável, para que o subsistema do WSK não fique sem recursos de memória. Portanto, o aplicativo WSK pode precisar copiar os dados dos buffers de dados que pertencem ao subsistema WSK em seus próprios buffers de dados.

Nota As listas acima não são necessariamente exaustivas. Pode haver outros pontos a serem considerados ao escolher qual método é a melhor opção para um aplicativo WSK específico.