Winsock Overlapped I/O and Event Objects
9/8/2008
Sockets do Windows (Winsock) E/S sobreposto oferece suporte e requer que transporte todos os provedores suporte essa funcionalidade. E/S sobreposto segue o modelo estabelecido na Win32 e pode ser executada somente nos soquetes criados por meio de WSASocket função com o conjunto sinalizador WSA_FLAG_OVERLAPPED ou soquetes criados por meio de Soquete função.
Observação
Criando um Soquete com o atributo sobreposto não terá impacto se um Soquete está atualmente no bloqueio ou modo non-Blocking.Soquetes criados com o atributo sobreposto podem ser usados para executar sobreposto E/S.Esse procedimento for não alteração o bloqueio modo de um Soquete.Porque sobrepostas operações E/S não bloco, o bloqueio modo de uma Soquete é irrelevante para essas operações.
Para receber, use aplicativos a WSARecv Ou WSARecvFrom funções para fornecer buffers em que dados é a ser recebida. Se um ou mais buffers são postados prior to o tempo que dados foram recebidos pela rede, que dados podem ser colocados em buffers do usuário imediatamente como os dados chega. Colocando imediatamente os dados no usuário é buffers e aplicativo pode evitar a operação copiar que seria caso contrário ocorrer no tempo de Recv Ou recvfrom função é invocada. Se dados já estiver presentes quando receber buffers são postados, ele é copiado imediatamente para buffers do usuário.
Se dados chega quando há buffers de recebimento tem sido postados, o aplicativo, a rede muda para o síncrono familiar estilo de operação. A that is, de entrada dados é armazenada em buffer internamente até que o aplicativo emite um chamar de recebimento e assim fornece uma reserva para o qual os dados possam ser copiados.
No lado do envio, usam aplicativos WSASend Ou WSASendTo Para fornecer ponteiros para preenchido buffers e, em seguida, concordar com Não para interfira forma os buffers de alguma forma até que a rede tenha consumido conteúdo a reserva.
Sobreposto enviar e receber chamadas de retorno imediatamente. Um valor de retorno de zero indica que a operação E/S concluída imediatamente e que o correspondente indicação de conclusão já ocorreu. That is, o associado objeto evento foi sinalizado, ou uma conclusão rotina foi enfileirado e será executado quando o segmento chamado obtém para o estado de espera alertable.
Um valor de retorno de SOCKET_ERROR flexíveis com um código de erro de WSA_IO_PENDING indica que a operação sobreposta foi iniciada com êxito e que uma indicação subseqüente será fornecida quando enviar buffers tem sido consumidos ou quando um operação de recebimento foi concluída. Quaisquer outros código de erro indica que a operação sobreposta não foi iniciada com êxito e que nenhuma indicação de conclusão será próxima.
Tanto enviar quanto receber operações podem ser sobrepostas. As funções de recepção podem ser chamadas várias vezes para postagem buffers de recebimento em preparação para de entrada dados e a envia funções podem ser invocado several times a fila múltiplo buffers para enviar. Embora o aplicativo pode depender de uma série de buffers enviar sobreposto enviados na ordem fornecido, o correspondente indicações de conclusão podem ocorrer em uma ordem diferente. Da mesma forma, no lado de recebimento, buffers podem ser concluídos na ordem que eles são fornecidos, mas as indicações de conclusão podem ocorrer em uma ordem diferente.
Cancelando individual sobreposto operações pendente em uma determinada Soquete é impossível. No entanto, o closesocket função pode ser chamado para fechar a Soquete e eventualmente interromper todos pendente operações.
Com a exceção de SIO_ROUTING_INTERFACE_CHANGE e SIO_ADDRESS_LIST_CHANGE, todos os drivers rede execução no kernel e chamado em Winsock APIs não é possível usar E/S sobrepostos. Para obter mais informações, consulte WSARecv, WSARecvFrom, WSASend, WSASendToe WSAIoctl.
See Also
Reference
WSARecv
WSARecvFrom
WSASend
WSASendTo
WSAIoctl
Concepts
Winsock Event Objects
Winsock Completion Indications
Overlapped Completion Indication Mechanisms
Extended Byte-Order Conversion Routines
Scatter/Gather I/O Support