select
9/8/2008
Essa função determina o status de um ou mais soquetes, espera se necessário, para executar síncrono E/S.
Syntax
int select(
int nfds,
fd_set FAR* readfds,
fd_set FAR* writefds,
fd_set FAR* exceptfds,
const struct timeval FAR* timeout
);
Parameters
- nfds
[no] Ignorado. O nfds parâmetro incluído somente para compatibilidade com os soquetes Berkeley.
- readfds
[in, Out] Ponteiro opcional a um conjunto de soquetes a ser verificado para fins de legibilidade.
- writefds
[in, Out] Ponteiro opcional a um conjunto de soquetes a ser verificado para writability.
- exceptfds
[in, Out] Ponteiro opcional a um conjunto de soquetes para ser pesquisado para erros.
- tempo limite
[no] Tempo máximo para Selecione Para esperar, fornecidos na forma de um timeval estrutura. Definir o tempo limite parâmetro para NULL para bloqueio operação.
Return Value
Essa função retorna o número total de alças Soquete que estão prontos e contidas na fd_set estruturas, zero se o tempo limite expirou ou o SOCKET_ERROR se ocorreu um erro. Se o valor de retorno é SOCKET_ERROR, WSAGetLastError Pode ser usado para recuperar um código de erro específico.
A seguinte tabela mostra uma lista dos códigos de erro possível.
Código de erro | Descrição |
---|---|
WSANOTINITIALISED |
Um bem-sucedido WSAStartup chamar deve ocorrer antes de usar essa função. |
WSAEFAULT |
A implementação Soquetes do Windows foi possível alocar 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 da rede. |
WSAEINVAL |
O valor de tempo limite não é válido ou todos os três parâmetros descritor foram NULL. |
WSAEINTR |
O Soquete foi fechada. |
WSAEINPROGRESS |
Um bloqueio é chamar sockets do Windows (Winsock) 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. Os soquetes contidos o fd_set Estruturas devem ser associado com um provedor único serviço. O objetivo dessa restrição, soquetes são considerados como do provedor de serviço mesmo se a WSAPROTOCOL_INFO Estruturas descrevendo seus protocolos têm o mesmo providerId valor. Em retorno, as estruturas são atualizadas para refletir o subconjunto desses soquetes que satisfazem a condição especificada. O Selecione função retorna o número de soquetes reunião as condições. Um conjunto de macros é fornecido para manipular um fd_set estrutura. Embora essas macros sejam compatível com aqueles usados no software Berkeley, o subjacente representação é completamente diferente.
Observação
Se for um Soquete processamento chamar uma conexão (de não bloqueio), falha da tentativa de conectar é indicada na exceptfds (aplicativo deve, em seguida, chamar getsockopt SO_ERROR para determinar o valor de erro descrever por que ocorreu a falha).Este documento não define quais outros erros serão incluídos.
A seguinte tabela mostra os parâmetros que podem verificar soquetes para ler, gravação ou status de erro.
Parâmetro | Descrição |
---|---|
readfds |
Identifica os soquetes que serão verificados para melhor legibilidade. Um Soquete é considerado legível quando um das seguinte condições for atendida:
Um Soquete sinalizado para melhor legibilidade indica que o próximo chamar para aceitar, Recv, recvfrom, WSARecv, ou WSARecvFrom é garantida não para bloco. Para soquetes orientado à conexão, Legibilidade também pode indicar que uma solicitação para fechar a Soquete foi recebida de outro computador na rede. Se o circuito virtual foi fechado normalmente, e todos os dados foi recebido, um Recv irá retornar imediatamente com zero bytes ler. Se o circuito virtual era redefinir, um Recv Será completo imediatamente com uma código de erro such as WSAECONNRESET. |
writefds |
Identifica os soquetes que serão verificados para writability. Um Soquete é considerado gravável quando um das seguinte condições for atendida:
Um Soquete signalled de writeability significa que o próximo chamar para Enviar, SendTo, WSASend, ou WSASendTo função será provavelmente não bloco. Se o tamanho dos dados para serem enviados exceder a quantidade de de saída espaço do buffer sistema que está disponível, o pode chamar bloco em um bloqueio Soquete. |
exceptfds |
Identifica os soquetes que serão verificados para o seguinte condições excepcionais:
|
Os dois parâmetros, readfds, writefds, ou exceptfds, pode ser dado como NULL. Pelo menos um deve ser não-NULL e qualquer não-NULL conjunto descritor deve conter at least um identificador para um Soquete.
Quatro macros são definidas no arquivo de cabeçalho Winsock2.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 definição FD_SETSIZE para outro valor antes incluindo Winsock2.h.) Internamente, alças Soquete em um fd_set estrutura não são representados como sinalizadores bit como no UNIX Berkeley. É sua representação dados opacidade. Uso dessas macros manterá portabilidade software entre ambientes diferentes Soquete. O seguinte macros manipulam e verificar fd_set Conteúdo:
FD_CLR(s, *set)
Observação
Remove descritor s do conjunto.
FD_ISSET(s, *set)
Observação
Se diferente de zero s é um membro do conjunto.Caso contrário, zero.
FD_SET(s, *set)
Observação
Adiciona descritor s Para definir.
FD_ZERO(*set)
Observação
Inicializa o definido como o NULL definido.
O tempo limite parâmetro controles quanto o Selecione Pode levar para completo. Se tempo limite é um NULL ponteiro, Selecione 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 Selecione deve esperar antes de retornar. Quando Selecione Retorna, o conteúdo das timeval estrutura não são alteradas. Se timeval é inicializado para {0, 0}, Selecione Retornará imediatamente; Isso é usado para pesquisar o estado dos soquetes selecionados. Se Selecione retorna imediatamente, e o Selecione chamar é considerado de não bloqueio e o padrão suposições para de não bloqueio chama aplicar. De exemplo, o bloqueio gancho não será chamado e será Soquetes do Windows não lucro.
Observação
O Selecione função não tem nenhum efeito sobre a persistência dos eventos Soquete registrados com WSAEventSelect.
Requirements
Header | winsock2.h |
Library | Ws2.lib |
Windows Embedded CE | Windows CE 1.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
accept (Windows Sockets)
connect (Windows Sockets)
listen
recv
recvfrom
send
sendto
WSAEventSelect
setsockopt (Windows Sockets)
WSAGetLastError
WSARecv
WSARecvFrom
WSASendTo
WSAStartup
timeval