select

Windows Mobile SupportedWindows Embedded CE Supported

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:

  • escutar foi chamado e uma conexão está pendente. Neste maiúsculas e minúsculas, aceitar (Soquetes do Windows) Será completo sem bloqueio.
  • Dados disponível para leitura, incluindo out of dados banda (OOB) se SO_OOBINLINE está habilitado.
  • A conexão foi fechada ou finalizado.

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:

  • O Soquete é processamento um conectar chamar (de não bloqueio) e a conexão suceeds.
  • Dados podem ser enviados.

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:

  • O Soquete é processamento um conectar chamar (de não bloqueio) e a conexão tentam falhar.
  • Dados OOB está disponível para leitura se SO_OOBINLINE estiver desativado.
  • Ocorreu um erro com um de não bloqueio em andamento, operação.
  • O Soquete está em um estado de erro, de exemplo, a Soquete foi fechada.

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