Estrutura LINGER (winsock.h)

A estrutura persistente mantém informações sobre um soquete específico que especifica como esse soquete deve se comportar quando os dados são enfileirados para serem enviados e a função closesocket é chamada no soquete.

Sintaxe

typedef struct linger {
  u_short l_onoff;
  u_short l_linger;
} LINGER, *PLINGER, *LPLINGER;

Membros

l_onoff

Tipo: u_short

Especifica se um soquete deve permanecer aberto por um período especificado após uma chamada de função closesocket para permitir que os dados enfileirados sejam enviados. Esse membro pode ter um dos valores a seguir.

Valor Significado
0
O soquete não permanecerá aberto. Esse será o valor definido se a função setsockopt for chamada com o parâmetro optname definido como SO_DONTLINGER e o parâmetro optval for zero.

Esse valor também será definido se a função setsockopt for chamada com o parâmetro optname definido como SO_LINGER e a estrutura persistente passada no parâmetro optval tiver o membro l_onoff definido como 0.

Zero
O soquete permanecerá aberto por um período especificado. Esse valor será definido se a função setsockopt for chamada com o parâmetro optname definido como SO_DONTLINGER e o parâmetro optval não for zero.

Esse valor também será definido se a função setsockopt for chamada com o parâmetro optname definido como SO_LINGER e a estrutura persistente passada no parâmetro optval tiver o membro l_onoff definido como um valor diferente de zero.

l_linger

Tipo: u_short

O tempo de permanência em segundos. Esse membro especifica por quanto tempo permanecer aberto após uma chamada de função closesocket para habilitar o envio de dados enfileirados. Esse membro só será aplicável se o membro l_onoff da estrutura persistente for definido como um valor diferente de zero.

Esse valor será definido se a função setsockopt for chamada com o parâmetro optname definido como SO_LINGER. O parâmetro optval passado para a função setsockopt deve conter uma estrutura persistente copiada para a estrutura persistente interna mantida para o soquete.

Comentários

O membro l_onoff da estrutura persistente determina se um soquete deve permanecer aberto por um período especificado após uma chamada de função closesocket para permitir que os dados enfileirados sejam enviados. Um pouco confuso é que esse membro pode ser modificado de duas maneiras:

  • Chame a função setsockopt com o parâmetro optname definido como SO_DONTLINGER. O parâmetro optval determina como o membro l_onoff é modificado.
  • Chame a função setsockopt com o parâmetro optname definido como SO_LINGER. O parâmetro optval especifica como os membros l_onoff e l_linger são modificados.

O membro l_linger da estrutura persistente determina a quantidade de tempo, em segundos, que um soquete deve permanecer aberto. Esse membro só será aplicável se o membro l_onoff da estrutura persistente não for zero.

Para permitir que um soquete permaneça aberto, um aplicativo deve definir o membro l_onoff como um valor diferente de zero e definir o membro l_linger como o tempo limite desejado em segundos. Para desabilitar a abertura de um soquete, um aplicativo só precisa definir o membro l_onoff da estrutura persistente como zero.

Se um aplicativo chamar a função setsockopt com o parâmetro optname definido como SO_DONTLINGER para definir o membro l_onoff como um valor diferente de zero, o valor do membro l_linger não será especificado. Nesse caso, o tempo limite usado depende da implementação. Se um tempo limite anterior tiver sido estabelecido para um soquete (habilitando SO_LINGER), esse valor de tempo limite deverá ser restabelecido pelo provedor de serviços.

Observe que não é recomendável habilitar um tempo limite diferente de zero em um soquete sem bloqueio.

A função getsockopt pode ser chamada com o parâmetro optname definido como SO_LINGER para recuperar o valor atual da estrutura persistente associada a um soquete.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho winsock.h (inclua Winsock2.h)

Confira também

Desligamento normal, opções persistentes e fechamento de soquete

Closesocket

Getsockopt

Setsockopt