IP_TRANSPARENT ausente dos cabeçalhos glibc

4

Estou tentando usar a declaração IP_TRANSPARENT . Eu estou usando o debian 6.0.5. IP_TRANSPARENT é definido apenas em linux/in.h , mas está em conflito com netinet/in.h . Em centos por exemplo, IP_TRANSPARENT é definido em linux/in.h e bits/in.h .

Quando eu olho para o topo de bits/in.h (que eu recebo quando eu incluo netinet/in.h , o centos um tem

/* Copyright (C) ... 2008, 2010 Free Software Foundation, Inc.

Considerando que um em minha instalação debian tem

/* Copyright (C) ... 2004, 2008 Free Software Foundation, Inc.

Eu tentei

apt-get install linux-headers-2.6.32-5-686

Mas diz que já é a versão mais recente. Como atualizo os cabeçalhos debian linux para as últimas versões?

Editar:

Em centos, IP_TRANSPARENT é definido em bits/in.h , o que recebo se incluo netinet/in.h . Compila bem sob centos.

No debian, IP_TRANSPARENT não está em bits/in.h , então, quando incluo netinet/in.h , recebo um erro ‘IP_TRANSPARENT’ undeclared ao compilar.

    
por A G 13.12.2012 / 18:45

1 resposta

3

Tenho certeza de que você já tem as versões certas, mas linux/in.h é um cabeçalho do kernel que você não deve tentar incluir diretamente em um programa de espaço do usuário.

Você também não deve incluir bits/in.h , pois esse é um fragmento de cabeçalho que será incluído por outros cabeçalhos quando necessário.

O netinet/in.h é o que você deve incluir e, por sua vez, incluirá o cabeçalho bits/in.h . Se isso não tiver uma definição para IP_TRANSPARENT , a versão do glibc no sistema é muito antiga.

Se você não pode atualizar glibc porque você já está na versão mais recente oferecida pela sua distribuição, a solução pragmática e a que tornará seu programa portátil é adicionar o seguinte ao seu código:

#ifndef IP_TRANSPARENT
#define IP_TRANSPARENT  19
#endif
    
por 13.12.2012 / 20:10