Problems with header in. h

Asked

Viewed 306 times

1

I am using the code below to check the IP of the computer, but the Code Blocks is giving error.

#include <ifaddrs.h>
#include <ip.h>
#include <stdio.h>

int main()
{
struct ifaddrs *id;
int val;
val = getifaddrs(&id);
printf("Network Interface Name :- %s\n",id->ifa_name);
printf("Network Address of %s :- %d\n",id->ifa_name,id->ifa_addr);
//printf("Network Data :- %d \n",id->ifa_data);
//printf("Socket Data : -%c\n",id->ifa_addr->sa_data);
return 1;
}

And he gives that mistake:

||=== Build file: "no target" in "no project" (compiler: unknown) ===|
C:\Program Files\CodeBlocks\MinGW\include\netinet\in.h|73|error: unknown type name 'u_long'|
C:\Program Files\CodeBlocks\MinGW\include\netinet\in.h|116|error: unknown type name 'u_char'|
C:\Program Files\CodeBlocks\MinGW\include\netinet\in.h|117|error: unknown type name 'u_char'|
C:\Program Files\CodeBlocks\MinGW\include\netinet\in.h|118|error: unknown type name 'u_short'|
C:\Program Files\CodeBlocks\MinGW\include\netdb.h|29|fatal error: rpc/netdb.h: No such file or directory|
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

When I went to look at the header in. h, it is declared:

in. h

/*
* Copyright (c) 1982, 1986, 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)in.h 7.11 (Berkeley) 4/20/91
*/

/*
* Constants and structures defined by the internet system,
* Per RFC 790, September 1981.
*/

/*
* Protocols
*/
#define IPPROTO_IP 0 /* dummy for IP */
#define IPPROTO_ICMP 1 /* control message protocol */
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
#define IPPROTO_TCP 6 /* tcp */
#define IPPROTO_EGP 8 /* exterior gateway protocol */
#define IPPROTO_PUP 12 /* pup */
#define IPPROTO_UDP 17 /* user datagram protocol */
#define IPPROTO_IDP 22 /* xns idp */
#define IPPROTO_TP 29 /* tp-4 w/ class negotiation */
#define IPPROTO_EON 80 /* ISO cnlp */

#define IPPROTO_RAW 255 /* raw IP packet */
#define IPPROTO_MAX 256


/*
* Local port number conventions:
* Ports < IPPORT_RESERVED are reserved for
* privileged processes (e.g. root).
* Ports > IPPORT_USERRESERVED are reserved
* for servers, not necessarily privileged.
*/
#define IPPORT_RESERVED 1024
#define IPPORT_USERRESERVED 5000

/*
* Internet address (a structure for historical reasons)
*/
struct in_addr {
u_long s_addr;
};

/*
* Definitions of bits in internet address integers.
* On subnets, the decomposition of addresses to host and net parts
* is done according to subnet mask, not the masks here.
*/
#define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0)
#define IN_CLASSA_NET 0xff000000
#define IN_CLASSA_NSHIFT 24
#define IN_CLASSA_HOST 0x00ffffff
#define IN_CLASSA_MAX 128

#define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000)
#define IN_CLASSB_NET 0xffff0000
#define IN_CLASSB_NSHIFT 16
#define IN_CLASSB_HOST 0x0000ffff
#define IN_CLASSB_MAX 65536

#define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000)
#define IN_CLASSC_NET 0xffffff00
#define IN_CLASSC_NSHIFT 8
#define IN_CLASSC_HOST 0x000000ff

#define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000)
#define IN_MULTICAST(i) IN_CLASSD(i)

#define IN_EXPERIMENTAL(i) (((long)(i) & 0xe0000000) == 0xe0000000)
#define IN_BADCLASS(i) (((long)(i) & 0xf0000000) == 0xf0000000)

#define INADDR_ANY (u_long)0x00000000
#define INADDR_BROADCAST (u_long)0xffffffff /* must be masked */
#ifndef KERNEL
#define INADDR_NONE 0xffffffff /* -1 return */
#endif

#define IN_LOOPBACKNET 127 /* official! */

/*
* Socket address, internet style.
*/
struct sockaddr_in {
u_char sin_len;
u_char sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};

/*
* Structure used to describe IP options.
* Used to store options internally, to pass them to a process,
* or to restore options retrieved earlier.
* The ip_dst is used for the first-hop gateway when using a source route
* (this gets put into the header proper).
*/
struct ip_opts {
struct in_addr ip_dst; /* first hop, 0 w/o src rt */
char ip_opts[40]; /* actually variable in size */
};

/*
* Options for use with [gs]etsockopt at the IP level.
* First word of comment is data type; bool is stored in int.
*/
#define IP_OPTIONS 1 /* buf/ip_opts; set/get IP per-packet options */
#define IP_HDRINCL 2 /* int; header is included with data (raw) */
#define IP_TOS 3 /* int; IP type of service and precedence */
#define IP_TTL 4 /* int; IP time to live */
#define IP_RECVOPTS 5 /* bool; receive all IP options w/datagram */
#define IP_RECVRETOPTS 6 /* bool; receive IP options for response */
#define IP_RECVDSTADDR 7 /* bool; receive IP dst addr w/datagram */
#define IP_RETOPTS 8 /* ip_opts; set/get IP per-packet options */

#ifdef KERNEL
struct in_addr in_makeaddr();
u_long in_netof(), in_lnaof();
#endif
  • Try to replace #include <ip.h> for #include <arpa/inet.h>

  • 1

    Very strange this header without including Guardian

1 answer

0

Replace in in.h all the u_long, u_char and u_short for unsigned long, unsigned char and unsigned short respectively.

The other error concerns the header missing netdb.h that has not installed in your environment, or is not finding depending on your build settings.

  • 2

    Are you suggesting modifying a system file? And if it wants to compile on another machine, it will work too?

  • @Amadeus Yes, that’s probably what defines that they’re in some other header of his environment the delta unsigned long, unsigned char and unsigned short works on any platform in any operating system.

  • 1

    Don’t take this the wrong way. I think it’s a terrible idea. Much better that it tries to fix the build system / includes and libraries than try to plug holes that way. Quickly it will lose control of what has been changed or not. As you yourself noticed there are other problems

  • @Quiet Amadeus, I don’t think it’s the right way to solve his problem either. But to make your suggestion we would have to understand his entire environment to find where that definition is.

  • You have the possibility to change the file without having to touch it. Use a #define before including the archive

Browser other questions tagged

You are not signed in. Login or sign up in order to post.