Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Nov 2011 05:50:13 GMT
From:      Bruce Evans <brde@optusnet.com.au>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: misc/162952: Problems including netinet/tcp_var.h
Message-ID:  <201111300550.pAU5oD21036820@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR misc/162952; it has been noted by GNATS.

From: Bruce Evans <brde@optusnet.com.au>
To: Emil <the_mix_room@hotmail.com>
Cc: freebsd-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org
Subject: Re: misc/162952: Problems including netinet/tcp_var.h
Date: Wed, 30 Nov 2011 16:41:32 +1100 (EST)

 On Tue, 29 Nov 2011, Emil wrote:
 
 > FreeBSD $HOSTNAME.local 8.2-RELEASE FreeBSD 8.2-RELEASE #3: Sat Apr 16 09:20:53 CEST 2011     emil@$HOSTNAME.local:/usr/obj/usr/src/sys/IPSEC  i386
 >
 >> Description:
 > When attempting to include netinet/tcp_var.h in a c++ file, the compiler throws a number of errors.
 >
 > "In file included from INPUT.cpp:1:
 > /usr/include/netinet/tcp_var.h:51: error: expected ';' before 'tqe_q'
 > /usr/include/netinet/tcp_var.h:56: error: expected constructor, destructor, or type conversion before '(' token
 > /usr/include/netinet/tcp_var.h:67: error: expected ';' before 'scblink'
 > /usr/include/netinet/tcp_var.h:102: error: field 't_segq' has incomplete type
 > /usr/include/netinet/tcp_var.h:184: error: 'sackhole_head' has not been declared
 > /usr/include/netinet/tcp_var.h:184: error: expected ';' before 'snd_holes'
 > /usr/include/netinet/tcp_var.h:318: error: expected ';' before 'tw_2msl'"
 >
 > I am assuming that I am missing an include, as such I have filed this as a documentation bug.
 >> How-To-Repeat:
 > execute "c++ INPUT"
 >
 > INPUT.cpp
 >
 > 1 #include <netinet/tcp_var.h>
 
 Most networking headers have _many_ undocumented prerequisites.
 tcp_var.h itself is is not really documented, so you just have to know
 what its prerequisites are and shouldn't expect it to work for C++.
 You have to be a networking person or use trial and error to know the
 prerequisites.  (In 2004, tcp_var.h was not mentioned in any man page.
 Now it is mentioned in siftr.4 and hhook.9, and these references are
 only usable for human readers of tcp_var.h.  hhook.9 has a synopsis
 that can't possibly work due to missing prerequisites for the 1 header
 that it satisifies, despite massive pollution internal to this header.)
 
 When I stopped policing prerequisites in 1999, minimal prerequisites
 for <netinet/tcp_var.h> were
 
  	#include <sys/types.h>
  	#include <netinet/in.h>
  	#include <netinet/in_systm.h>
  	#include <netinet/ip_var.h>
  	#include <netinet/tcp.h>
 
 in that order.  These were found by trial and error (many trials and
 many errors for each file tested.  The trials included complete tests
 of subsets to find a minimum that worked for a range of compilers and
 compiler options, and incomplete tests of ordering).  These still work,
 at least with gcc and normal compiler options.  They happen to work
 for C++ too.
 
 Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201111300550.pAU5oD21036820>