Função de retorno de chamada LPWSPSELECT (ws2spi.h)
A função LPWSPSelect determina o status de um ou mais soquetes.
Sintaxe
LPWSPSELECT Lpwspselect;
int Lpwspselect(
[in] int nfds,
[in, out] fd_set *readfds,
[in, out] fd_set *writefds,
[in, out] fd_set *exceptfds,
[in] const timeval *timeout,
[out] LPINT lpErrno
)
{...}
Parâmetros
[in] nfds
Ignorado e incluído apenas para fins de compatibilidade.
[in, out] readfds
Ponteiro opcional para um conjunto de soquetes a ser verificado quanto à legibilidade.
[in, out] writefds
Ponteiro opcional para um conjunto de soquetes a ser verificado quanto à gravabilidade.
[in, out] exceptfds
Ponteiro opcional para um conjunto de soquetes a serem verificados quanto a erros.
[in] timeout
Tempo máximo para
[out] lpErrno
Ponteiro para o código de erro.
Valor de retorno
A função LPWSPSelect retorna o número total de descritores prontos e contidos nas estruturas de fd_set ou SOCKET_ERROR se ocorreu um erro. Se o valor retornado for SOCKET_ERROR, um código de erro específico estará disponível em lpErrno.
Observações
Essa função é usada para determinar o status de um ou mais soquetes. Para cada soquete, o chamador pode solicitar informações sobre o status de leitura, gravação ou erro. O conjunto de soquetes para o qual um determinado status é solicitado é indicado por uma estrutura de fd_set. Todas as entradas em um fd_set correspondem aos soquetes criados pelo provedor de serviços (ou seja, as estruturas de WSAPROTOCOL_INFO que descrevem seus protocolos têm o mesmo valor providerId). Após o retorno, as estruturas são atualizadas para refletir o subconjunto desses soquetes que atendem à condição especificada e LPWSPSelect retorna o número total de soquetes que atendem às condições. Um conjunto de macros é fornecido para manipular um fd_set. Essas macros são compatíveis com as usadas no software berkeley, mas a representação subjacente é completamente diferente.
O parâmetro readfds identifica os soquetes que devem ser verificados quanto à legibilidade. Se o soquete estiver escutando LPWSPListen, ele será marcado como legível se uma solicitação de conexão de entrada tiver sido recebida, de modo que uma LPWSPAccept seja garantida para ser concluída sem bloqueio. Para outros soquetes, a legibilidade significa que os dados enfileirados estão disponíveis para leitura para que um LPWSPRecv ou LPWSPRecvFrom não seja bloqueado.
Para soquetes orientados à conexão, a legibilidade também pode indicar que uma solicitação próxima foi recebida do par. Se o circuito virtual tiver sido fechado normalmente, um LPWSPRecv retornará imediatamente com zero bytes lidos. Se o circuito virtual foi redefinido, um LPWSPRecv será concluído imediatamente com um código de erro, como WSAECONNRESET. A presença de dados OOB será verificada se a opção de soquete SO_OOBINLINE tiver sido habilitada (consulte LPWSPSetSockOpt).
O parâmetro writefds identifica os soquetes que devem ser verificados quanto à gravabilidade:
- Se um soquete estiver se conectando por meio de LPWSPConnect, a gravabilidade significa que o estabelecimento de conexão foi concluído com êxito.
- Se o soquete não estiver em processo de escuta por meio de
LPWSPConnect, a gravabilidade significa que uma LPWSPSendou terá êxito.LPWSPSendTo
No entanto, eles podem bloquear um soquete de bloqueio se o len exceder a quantidade de espaço de buffer do sistema de saída disponível. Não é especificado por quanto tempo essas garantias podem ser consideradas válidas, especialmente em um ambiente multithread.
O parâmetro exceptfds identifica os soquetes que devem ser verificados quanto à presença de dados OOB ou a quaisquer condições de erro excepcionais. Observe que os dados OOB só serão relatados dessa forma se a opção SO_OOBINLINE for false. Se um soquete estiver fazendo uma conexão LPWSPConnect (não desbloqueio), a falha da tentativa de conexão será indicada em exceções. Essa especificação não define quais outros erros serão incluídos.
Qualquer um dos dois , writefdsou pode ser dado como nulo se nenhum descritor deve ser verificado quanto à condição de interesse. Pelo menos um deve ser não
Resumo: um soquete será identificado em um determinado conjunto quando LPWSPSelect retornar de acordo com o seguinte.
Parâmetro | Descrição |
---|---|
readfds: | Se LPWSPListen for chamado, uma conexão estará pendente, LPWSPAccept terá êxito. Os dados estarão disponíveis para leitura (inclui dados OOB se SO_OOBINLINE estiver habilitado). A conexão foi fechada/redefinida/encerrada. |
writefds: | Se LPWSPConnect (sem bloqueio), a conexão foi bem-sucedida. Os dados podem ser enviados. |
exceptfds: | Se LPWSPConnect (não desbloqueio), a tentativa de conexão falhou. Os dados do OOB estão disponíveis para leitura (somente se SO_OOBINLINE estiver desabilitado). |
Três macros e uma função de upcall são definidas no arquivo de cabeçalho Ws2spi.h para manipular e verificar os conjuntos de descritores. A variável FD_SETSIZE determina o número máximo de descritores em um conjunto. (O valor padrão de FD_SETSIZE é 64, que pode ser modificado por #defining FD_SETSIZE para outro valor antes de #including Ws2spi.h.) Internamente, os identificadores de soquete em uma fd_set não são representados como sinalizadores de bits como em Berkeley UNIX. A representação de dados deles é opaca. O uso dessas macros manterá a portabilidade do software entre diferentes ambientes de soquete.
As macros para manipular e verificar fd_set conteúdo são:
-
FD_CLR(de , * set ) -
Remove o do
do descritor do conjunto de . -
FD_SET(de , * set ) -
Adiciona de
de descritor ao conjunto . -
FD_ZERO(*)
-
Inicializa o conjunto de
para o conjunto de nulo .
A função upcall usada para verificar a associação é:
-
intWPUFDIsSet ( do SOCKET , FD_SETde FAR ); -
que retornará diferente de zero se for um membro do conjunto de ou de outra forma zero.
O parâmetro
Nota
A função LPWSPSelect
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 2000 Professional [somente aplicativos da área de trabalho] |
servidor com suporte mínimo | Windows 2000 Server [somente aplicativos da área de trabalho] |
cabeçalho | ws2spi.h |
Consulte também
LPWSPAccept