connect (Windows Sockets)
9/8/2008
Essa função estabelece uma conexão a um Soquete especificado.
Syntax
int connect(
SOCKET s,
const struct sockaddr FAR* name,
int namelen
);
Parameters
- s
[no] Descritor identificando um Soquete desconectado.
- Nome
[no] Nome do Soquete para que a conexão deve ser estabelecido.
- namelen
[no] Comprimento do nome.
Return Value
Se não houver erro, essa função retornará zero. Se um erro ocorrer, ele retorna SOCKET_ERROR, e um código de erro específicos podem ser recuperadas por chamado WSAGetLastError.
Em um bloqueio Soquete, o valor de retorno indica êxito ou falha da tentativa de conexão.
Com um de não bloqueio Soquete, tentativa de conexão não pode ser concluída imediatamente. Neste maiúsculas e minúsculas, essa função retornará SOCKET_ERROR e WSAGetLastError Retornará WSAEWOULDBLOCK. A seguinte lista mostra os três cenários que são possíveis neste maiúsculas e minúsculas:
- Use o Selecione função para determinar a conclusão de solicitação de conexão, verificando se o Soquete é gravável.
- Se o aplicativo está usando WSAEventSelect Para indicar interesse em eventos conexão, em seguida, o associado objeto evento será sinalizado indicando que a operação conectar está completo (com êxito ou não).
Até que a tentativa conexão completa em um de não bloqueio Soquete, todas as chamadas subseqüentes para conectar no mesmo Soquete falhará com o código de erro WSAEALREADY WSAEISCONN e quando a conexão for concluída com êxito. Devido a ambigüidades no sockets do Windows (Winsock), códigos de erro retornado pelo conectar Enquanto uma conexão já está pendente pode variar entre implementações. Como resultado, não é recomendável que os aplicativos usam múltiplo chama para conectar a detecção conexão conclusão. Se eles isso, eles devem ser preparados para identificador WSAEINVAL e WSAEWOULDBLOCK Erro códigos da mesma maneira que eles identificador WSAEALREADY para garantir a execução robusta.
Se o código de erro retornado indica falha tentativa de conexão (that is, WSAECONNREFUSED, WSAENETUNREACH ou WSAETIMEDOUT), o aplicativo pode chamar conectar novamente para o mesmo Soquete.
Remarks
Essa função é usada para criar uma conexão para o destino especificado. Se Soquete s é desacoplado, os valores são atribuídos para o local exclusivo associação, o sistema e o Soquete está marcada como ligado.
Para os soquetes orientado à conexão (por exemplo, tipo SOCK_STREAM), um conexão ativa é iniciado para o hospedar externa usando Nome (um endereço no espaço de nome da Soquete; Para obter uma descrição detalhada, consulte BIND (Soquetes do Windows) e sockaddr.
Quando a chamar Soquete é concluído com êxito, o Soquete está pronto para enviar e receber dados. Se o membro endereço da estrutura especificada pelo Nome parâmetro é todos os zeros, conectar retornará o Erro WSAEADDRNOTAVAIL. Qualquer tentativa reconectar um conexão ativa falhará com o código de erro WSAEISCONN.
Para de não bloqueio Connection-Oriented soquetes, geralmente não é possível completo imediatamente a conexão. Em tais uma maiúsculas e minúsculas, essa função retornará o Erro WSAEWOULDBLOCK; No entanto, a operação continua.
Quando o resultado de êxito ou falha se torna conhecido, a maneira na qual ele é relatado depende como o cliente registra para notificação. A seguinte lista mostra a maneira na qual ele pode ser reportado:
- Se o cliente usa o Selecione função, o sucesso é reportado no conjunto de writefds e falha é relatada no conjunto de exceptfds.
- Se o cliente usa o WSAEventSelect função, a notificação é anunciada com o código de erro e FD_CONNECT associado com o FD_CONNECT indica um motivo específico para falha ou sucesso.
Para um sem conexão Soquete (por exemplo, tipo SOCK_DGRAM), a operação executada por conectar é simplesmente estabelecer um endereço destino usar como padrão que pode ser usado em subseqüentes Enviar/WSASend e Recv/WSARecv Chamadas. Quaisquer datagramas recebidos de um endereço diferente de endereço de destino especificado serão descartados. Se o membro endereço da estrutura especificada por Nome Todos os zeros, de Soquete será desconectada. Em seguida, o remoto usar como padrão endereço será indeterminado, caso Enviar /WSASend e Recv /WSARecv Chamadas retornarão o código de erro WSAENOTCONN. No entanto, SendTo/WSASendTo e recvfrom/WSARecvFrom ainda pode ser usado. O destino usar como padrão pode ser alterado pelo simplesmente chamado conectar Novamente, mesmo se já estiver conectado a Soquete. Quaisquer datagramas enfileirado para confirmação serão descartados se Nome é diferente da anterior conectar.
Para sem conexão soquetes, Nome Pode indicar qualquer válido endereço, incluindo um transmitir endereço. No entanto, para conectar a um transmitir endereço, deve usar um Soquete setsockopt (Soquetes do Windows) Para habilitar a opção SO_BROADCAST. Caso contrário, conectar falhará com o código de erro WSAEACCES.
Quando uma conexão entre os soquetes for interrompida, os soquetes devem ser descartados e recriados. Quando um problema desenvolve em um Soquete conectado, o aplicativo deve descartar e recriar os soquetes necessários para retornar a uma apontar estável.
Anotações de Sockets IrDA
- O arquivo cabeçalho Af_irda.h deve ser explicitamente incluído.
- Se uma conexão IrDA existente for detectado na mídia-nível de acesso, WSAENETDOWN é retornado.
- Se ativo conexões para um dispositivo com um endereço diferente existirem, WSAEADDRINUSE é retornado.
- Se o Soquete já está conectado ou uma falha alteração modo Exclusive/Multiplexed, WSAEISCONN é retornado.
- Se o Soquete anteriormente foi ligado a um local nome serviço para de entrada aceitar conexões usando BINDWSAEINVAL, será retornado. Observe que depois que um Soquete estiver ligado, ele não pode ser usado para estabelecer uma de saída conexão.
IrDA implementa o conectar função com endereços de sockaddr_irda de forma. Normalmente, um aplicativo cliente criará um Soquete com o Soquete (Soquetes do Windows) função, digitalizar a proximidades imediata para dispositivos IrDA com a opção Soquete IRLMP_ENUMDEVICES, escolher um dispositivo da lista retornada, forma um endereço e chamar conectar. Não há nenhuma diferença entre bloqueio e de não bloqueio semântica.
Para obter mais inforamtion sobre suporte IrDA no Windows Embedded CE, consulte Comunicação via infravermelho.
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. |
WSAENETDOWN |
Falha no subsistema da rede. |
WSAEADDRINUSE |
Local do Soquete o endereço já está em uso e a Soquete não foi marcado para Permitir reutilização endereço com SO_REUSEADDR. Esse erro geralmente ocorre quando a execução BIND, mas ele pode ser adiado até a conectar função se a BIND Era um endereço curinga parcialmente (envolvendo ADDR_ANY) e se um endereço específico precisa ser confirmada no tempo da conectar função. |
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. |
WSAEALREADY |
Um de não bloqueio conectar chamar é em andamento na Soquete especificado. Para preservar compatibilidade com versões anteriores, esse erro é relatado como WSAEINVAL à aplicativos sockets do Windows (Winsock) que link ao arquivo Winsock.dll ou Wsock32.dll. |
WSAEADDRNOTAVAIL |
O remoto endereço não é um válido endereço (such as ADDR_ANY). |
WSAEAFNOSUPPORT |
Endereços de família especificado não podem ser usados com este Soquete. |
WSAECONNREFUSED |
Tentar conectar forçada foi rejeitada. |
WSAEFAULT |
O Nome Ou namelen parâmetro não é um válido parte espaço de endereço de usuário, o namelen parâmetro é muito pequeno, ou a Nome parâmetro contém formato endereço incorreto para o associado família de endereços. |
WSAEINVAL |
O parâmetro s é um Soquete de escuta. |
WSAEISCONN |
O Soquete já está conectados (orientado à conexão soquetes somente). |
WSAENETUNREACH |
A rede não pode ser alcançada através deste host neste momento. |
WSAENOBUFS |
Nenhuma espaço do buffer está disponível. O Soquete não pode ser conectada. |
WSAENOTSOCK |
O descritor não é um Soquete. |
WSAETIMEDOUT |
Tentar conectar tempo limite atingido limite sem estabelecer uma conexão. |
WSAEWOULDBLOCK |
O Soquete está marcado como de não bloqueio e a conexão não pode ser concluída imediatamente. |
WSAEACCES |
Tentar conectar um soquete de datagrama para transmitir um endereço falha porque a opção Setsockopt SO_BROADCAST não está habilitado. |
Anotações de Sockets Bluetooth
- O arquivo cabeçalho ws2bth.h deve ser explicitamente incluído.
- Se a porta for definida como 0 na SOCKADDR_BTH endereço, em seguida, serviceClassId é usado na consulta de SDP antes tentativa de conexão é feita para determinar identificador canalizar servidor. Uso getpeername Sobre o Soquete conectada para recuperá-lo.
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)
bind (Windows Sockets)
getsockname (Windows Sockets)
recv
recvfrom
select
send
sendto
setsockopt (Windows Sockets)
sockaddr
socket (Windows Sockets)
WSAConnect
WSAEventSelect
WSAGetLastError
WSARecv
WSARecvFrom
WSASend
WSASendTo
WSAStartup