From owner-freebsd-bugs@FreeBSD.ORG Wed Nov 30 05:50:14 2011 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2B7531065670 for ; Wed, 30 Nov 2011 05:50:14 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 01ADE8FC18 for ; Wed, 30 Nov 2011 05:50:14 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id pAU5oDZN036826 for ; Wed, 30 Nov 2011 05:50:13 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id pAU5oD21036820; Wed, 30 Nov 2011 05:50:13 GMT (envelope-from gnats) Date: Wed, 30 Nov 2011 05:50:13 GMT Message-Id: <201111300550.pAU5oD21036820@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Bruce Evans Cc: Subject: Re: misc/162952: Problems including netinet/tcp_var.h X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Bruce Evans List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Nov 2011 05:50:14 -0000 The following reply was made to PR misc/162952; it has been noted by GNATS. From: Bruce Evans To: Emil 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 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 were #include #include #include #include #include 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