WSPSelect
9/8/2008
Essa função determina o status de um ou mais soquetes.
Syntax
int WSPSelect(
int nfds,
fd_set FAR* readfds,
fd_set FAR* writefds,
fd_set FAR* exceptfds,
const struct timeval FAR* timeout,
LPINT lpErrno
);
Parameters
- nfds
[no] Compatibilidade ignorada e incluída apenas for the sake of.
- readfds
[in, Out] Um opcional ponteiro para um conjunto de soquetes a ser verificado para fins de legibilidade.
- writefds
[in, Out] Um opcional ponteiro para um conjunto de soquetes a ser verificado para writability
- exceptfds
[in, Out] Um opcional ponteiro para um conjunto de soquetes para ser pesquisado para erros.
- tempo limite
[no] Tempo máximo para WSPSelect Para esperar, ou NULL para um bloqueio operação.
- lpErrno
[out] Ponteiro para o código de erro.
Return Value
Essa função retorna o número total de descritores que estão prontos e contido na fd_set estruturas, ou SOCKET_ERROR se ocorreu um erro. Se o valor de retorno for SOCKET_ERROR, um código de erro específico é disponível em lpErrno.
A seguinte tabela mostra os códigos de erro possível.
Valor de erro | Descrição |
---|---|
WSAEFAULT |
Provedor serviço Soquetes do Windows foi possível alocados os recursos necessários para suas operações internas, ou a readfds, writefds, exceptfds Ou timeval Parâmetros não fazem parte do espaço de endereço usuário. |
WSAENETDOWN |
falha no subsistema de rede. |
WSAEINVAL |
O tempo limite valor não é válido ou todos os três parâmetros descritor foram NULL. |
WSAEINPROGRESS |
Bloquear chamar Soquetes do Windows é em andamento, ou o serviço provedor ainda é processamento um função callback. |
WSAENOTSOCK |
Um dos conjuntos de descritor contém uma entrada que não seja um Soquete. |
Remarks
Essa função é usada para determinar o status de um ou mais soquetes. Para cada Soquete, o chamador pode informações solicitação ler, gravação ou status de erro. O conjunto de soquetes para os quais um determinado status é solicitada é indicado por um fd_set estrutura. Todas as entradas em um fd_set corresponder aos soquetes criados pelo provedor de serviço. Em retorno, as estruturas são atualizadas para refletir o subconjunto desses soquetes que satisfazem a condição especificada, e WSPSelect Retorna o número total de soquetes reunião as condições. Um conjunto de macros é fornecido para manipular um fd_set. Essas macros são compatível com aqueles usados no software Berkeley, mas o subjacente representação é completamente diferente.
O parâmetro readfds Identifica os soquetes que devem ser verificado para fins de legibilidade. Se o Soquete no momento está escutando através WSPListen, ele será marcado como legível se foi recebida uma solicitação de conexão de entrada, de modo que um WSPAccept é garantida para completo sem bloqueio. Para outros soquetes, Legibilidade significa que enfileirado dados está disponível para leitura de modo que um WSPRecv Ou WSPRecvFrom é garantida não para bloco.
Para soquetes orientado à conexão, Legibilidade também pode indicar que um fechar solicitação foi recebida de outro computador na rede. Se o circuito virtual foi fechado normalmente, e um WSPRecv irá retornar imediatamente com zero bytes ler. Se o circuito virtual era redefinir, e um WSPRecv Será completo imediatamente com uma código de erro, such as WSAECONNRESET. A presença de dados OOB será verificada se a opção Soquete SO_OOBINLINE tiver sido habilitado (consulte WSPSetSockOpt).
A seguinte lista mostra maneiras em que o parâmetro writefds Identifica os soquetes que devem ser verificado para writability:
- Se um Soquete está se conectando através WSPConnect, writability significa que o estabelecimento conexão concluído com êxito.
- Se o Soquete não estiver no processo de escuta através WSPConnect, writability significa que um WSPSend Ou WSPSendTo são garantidas seja bem-sucedida.
No entanto, eles pode bloco em um bloqueio Soquete se o Len excede a quantidade de de saída espaço do buffer sistema disponível. Ele não for especificado quanto tempo essas garantias podem ser consideradas válido, especialmente em um de vários segmentos ambiente.
O parâmetro exceptfds Identifica os soquetes que devem ser verificada a presença de dados OOB ou quaisquer condições de erro excepcional. Observe que OOB dados somente serão informados dessa forma se a opção SO_OOBINLINE é FALSE. Se estiver fazendo uma Soquete uma WSPConnect conexão (de não bloqueio), falha da tentativa de conexão é indicada na exceptfds. Essa especificação não define quais outros erros serão incluídos.
Os dois dos readfds, writefds, ou exceptfds Pode ser dado como NULL se nenhum descritores tiverem que ser verificado para a condição de interesse. Pelo menos um deve ser não-NULL e qualquer não-NULL conjunto descritor deve conter um at least Soquete descritor.
Um Soquete será identificado em um determinado conjunto quando WSPSelect Retorna parâmetros específicos. A seguinte tabela mostra esses parâmetros.
Parâmetro | Descrição |
---|---|
readfds |
Se WSPListen é chamado, uma conexão está pendente, WSPAccept funcionará. Dados disponível para leitura (inclui dados OOB se SO_OOBINLINE é habilitado). Conexão foi fechada/Redefinir/finalizado. |
writefds |
Se WSPConnect (de não bloqueio), conexão foi bem-sucedida. Dados podem ser enviados. |
Exceptfds |
Se WSPConnect (de não bloqueio), conexão tentativa falha. Dados OOB está disponível para leitura (somente se SO_OOBINLINE estiver desativada). |
Três macros e upcall uma função são definidos no arquivo de cabeçalho Ws2spi.h para manipular e verificando os conjuntos descritor. A variável FD_SETSIZE determina o número máximo de descritores de um conjunto. (O valor usar como padrão de FD_SETSIZE é 64, que pode ser modificado por # definindo FD_SETSIZE para outro valor antes # incluindo Ws2spi.h). Internamente, alças Soquete em um fd_set Não são representados como sinalizadores bit as in Berkeley UNIX. É sua representação dados opacidade. Uso dessas macros manterá portabilidade software entre ambientes diferentes Soquete.
Você pode manipular e verificar fd_set Conteúdo para o seguinte macros:
- (FD_CLR s , * Definir**)**
Remove o descritor s a partir Definir.
- (fd_set s , * Definir**)**
Adiciona descritor s Para Definir.
- (FD_ZERO* Definir**)**
Inicializa o Definir Para o NULL definido.
A função upcall usada para verificar a associação é Int (WPUFDIsSet SOCKET s, fd_set FAR * Definir ), que retornará diferente de zero se s é um membro das Definir caso contrário ou zero.
O parâmetro tempo limite Controles quanto o WSPSelect Pode levar para completo. Se tempo limite é um NULL ponteiro, WSPSelect Será bloco indefinidamente até at least um descritor atenda aos critérios especificados. Caso contrário, tempo limite aponta para um timeval estrutura que especifica o tempo máximo que WSPSelect deve esperar antes de retornar. Quando WSPSelect Retorna, o conteúdo das timeval estrutura não são alteradas. Se timeval é inicializado para {0, 0}, WSPSelect Retornará imediatamente; Isso é usado para pesquisar o estado dos soquetes selecionados. Se esse for a maiúsculas e minúsculas, e o WSPSelect chamar é considerado de não bloqueio e o padrão suposições para de não bloqueio chama aplicar. De exemplo, o bloqueio será gancho Não ser chamado e a Soquetes do Windows provedor não irá lucro.
Observação
WSPSelect nenhum efeito sobre a persistência dos eventos Soquete registrou com WSPEventSelect.
Requirements
Header | ws2spi.h |
Library | Ws2.lib |
Windows Embedded CE | Windows CE .NET 4.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
WSPAccept
WSPConnect
WSPRecv
WSPRecvFrom
WSPSend
WSPSendTo
WSPEventSelect