Partilhar via


Tipo de dados de soquete

Em aplicativos Winsock, um descritor de soquete não é um descritor de arquivo e deve ser usado com as funções Winsock.

No UNIX, um descritor de soquete é representado por um descritor de arquivo padrão. Como resultado, um descritor de soquete no UNIX pode ser passado para qualquer uma das funções de E/S de arquivo padrão (leitura e gravação, por exemplo).

Além disso, todos os identificadores no UNIX, incluindo identificadores de soquete, são inteiros pequenos e não negativos, e alguns aplicativos fazem suposições de que isso será verdadeiro.

Os identificadores do Windows Sockets não têm restrições, exceto que o valor INVALID_SOCKET não é um soquete válido. As alças de soquete podem ter qualquer valor no intervalo de 0 a INVALID_SOCKET–1.

Como o tipo SOCKET não está assinado, compilar o código-fonte existente de, por exemplo, um ambiente UNIX pode levar a avisos do compilador sobre incompatibilidades de tipo de dados assinados/não assinados.

Isso significa, por exemplo, que a verificação de erros quando o soquete e aceitar funções retornam não deve ser feita comparando o valor de retorno com –1 ou vendo se o valor é negativo (abordagens comuns e legais no UNIX). Em vez disso, um aplicativo deve usar a constante de manifesto INVALID_SOCKET conforme definido no Winsock2.h arquivo de cabeçalho. Por exemplo:

Estilo típico BSD UNIX

s = socket(...);
if (s == -1)    /* or s < 0 */
    {/*...*/}

Estilo preferido

s = socket(...);
if (s == INVALID_SOCKET)
    {/*...*/}

Portando aplicativos de soquete para Winsock

Considerações de programação Winsock