Compartilhar 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 números 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. Os identificadores de soquete podem levar qualquer valor no intervalo de 0 a INVALID_SOCKET a 1.

Como o tipo de 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 tipos de dados assinados/não assinados.

Isso significa, por exemplo, que a verificação de erros quando o soquete e aceitar retorno de funções não deve ser feita comparando o valor retornado 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 arquivo de cabeçalho Winsock2.h. Por exemplo:

Estilo típico do BSD UNIX

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

Estilo preferencial

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

portabilidade de aplicativos de soquete para o winsock

considerações sobre programação winsock