source: rtems/cpukit/libnetworking/netdb.h @ 918b7a9

4.104.114.84.95
Last change on this file since 918b7a9 was 068c3ee1, checked in by Joel Sherrill <joel.sherrill@…>, on 11/02/06 at 21:48:41

2006-11-02 Steven Johnson <sjohnson@…>

  • libnetworking/netdb.h, libnetworking/libc/gethostbyht.c, libnetworking/libc/gethostnamadr.c: This patch adds a functional gethostbyname_r to RTEMS. We were having problems with multiple threads calling gethostbyname, so we decided the best way to deal with it was to do it properly, rather than kludge up our code to make gethostbyname safe. We have found several slightly different parameter lists for this function, it does not seem to be standard. The one we used has the linux interface. In RTEMS there was an existing gethostbyname_r inside a #ifdef _THREAD_SAFE which was NOT Threadsafe, as this just called gethostbyname. So we have placed all of the additional code inside the #ifdef _THREAD_SAFE.
  • Property mode set to 100644
File size: 7.4 KB
Line 
1/*-
2 * Copyright (c) 1980, 1983, 1988, 1993
3 *      The Regents of the University of California.  All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 *    must display the following acknowledgement:
15 *      This product includes software developed by the University of
16 *      California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * -
34 * Portions Copyright (c) 1993 by Digital Equipment Corporation.
35 *
36 * Permission to use, copy, modify, and distribute this software for any
37 * purpose with or without fee is hereby granted, provided that the above
38 * copyright notice and this permission notice appear in all copies, and that
39 * the name of Digital Equipment Corporation not be used in advertising or
40 * publicity pertaining to distribution of the document or software without
41 * specific, written prior permission.
42 *
43 * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
44 * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
45 * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
46 * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
47 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
48 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
49 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
50 * SOFTWARE.
51 * -
52 * --Copyright--
53 */
54
55/*
56 *      @(#)netdb.h     8.1 (Berkeley) 6/2/93
57 *      From: Id: netdb.h,v 8.9 1996/11/19 08:39:29 vixie Exp $
58 * $FreeBSD: src/include/netdb.h,v 1.34 2005/02/14 11:33:11 phantom Exp $
59 */
60 
61/*
62 *      $Id$
63 */
64
65#ifndef _NETDB_H_
66#define _NETDB_H_
67
68#include <sys/cdefs.h>
69#include <rtems/bsdnet/_types.h>
70
71#ifndef _SOCKLEN_T_DECLARED
72typedef __socklen_t     socklen_t;
73#define _SOCKLEN_T_DECLARED
74#endif
75
76#ifndef _PATH_HEQUIV
77# define        _PATH_HEQUIV    "/etc/hosts.equiv"
78#endif
79#define _PATH_HOSTS     "/etc/hosts"
80#define _PATH_NETWORKS  "/etc/networks"
81#define _PATH_PROTOCOLS "/etc/protocols"
82#define _PATH_SERVICES  "/etc/services"
83
84extern int h_errno;
85
86/*
87 * Structures returned by network data base library.  All addresses are
88 * supplied in host order, and returned in network order (suitable for
89 * use in system calls).
90 */
91struct  hostent {
92        char    *h_name;        /* official name of host */
93        char    **h_aliases;    /* alias list */
94        int     h_addrtype;     /* host address type */
95        int     h_length;       /* length of address */
96        char    **h_addr_list;  /* list of addresses from name server */
97#define h_addr  h_addr_list[0]  /* address, for backward compatibility */
98};
99
100/*
101 * Assumption here is that a network number
102 * fits in an unsigned long -- probably a poor one.
103 */
104struct  netent {
105        char            *n_name;        /* official name of net */
106        char            **n_aliases;    /* alias list */
107        int             n_addrtype;     /* net address type */
108        unsigned long   n_net;          /* network # */
109};
110
111struct  servent {
112        char    *s_name;        /* official service name */
113        char    **s_aliases;    /* alias list */
114        int     s_port;         /* port # */
115        char    *s_proto;       /* protocol to use */
116};
117
118struct  protoent {
119        char    *p_name;        /* official protocol name */
120        char    **p_aliases;    /* alias list */
121        int     p_proto;        /* protocol # */
122};
123
124/*
125 * Error return codes from gethostbyname() and gethostbyaddr()
126 * (left in extern int h_errno).
127 */
128
129#define NETDB_INTERNAL  -1      /* see errno */
130#define NETDB_SUCCESS   0       /* no problem */
131#define HOST_NOT_FOUND  1 /* Authoritative Answer Host not found */
132#define TRY_AGAIN       2 /* Non-Authoritative Host not found, or SERVERFAIL */
133#define NO_RECOVERY     3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
134#define NO_DATA         4 /* Valid name, no data record of requested type */
135#define NO_ADDRESS      NO_DATA         /* no address, look for MX record */
136
137__BEGIN_DECLS
138void            endhostent(void);
139void            endnetent(void);
140void            endprotoent(void);
141void            endservent(void);
142struct hostent  *gethostbyaddr(const char *, int, int);
143struct hostent  *gethostbyname(const char *);
144struct hostent  *gethostbyname2(const char *, int);
145struct hostent  *gethostent(void);
146struct netent   *getnetbyaddr(unsigned long, int);
147struct netent   *getnetbyname(const char *);
148struct netent   *getnetent(void);
149struct protoent *getprotobyname(const char *);
150struct protoent *getprotobynumber(int);
151struct protoent *getprotoent(void);
152struct servent  *getservbyname(const char *, const char *);
153struct servent  *getservbyport(int, const char *);
154struct servent  *getservent(void);
155void            herror(const char *);
156__const char    *hstrerror(int);
157void            sethostent(int);
158/* void         sethostfile(const char *); */
159void            setnetent(int);
160void            setprotoent(int);
161void            setservent(int);
162
163#ifdef _THREAD_SAFE
164struct hostent* gethostent_r(char* buf, int len);
165int gethostbyname_r(const char*      name,
166                    struct hostent*  result,
167                    char            *buf,
168                    int              buflen,
169                    struct hostent **RESULT,
170                    int             *h_errnop) ;
171#endif             
172
173/*
174 * PRIVATE functions specific to the FreeBSD implementation
175 */
176
177/* DO NOT USE THESE, THEY ARE SUBJECT TO CHANGE AND ARE NOT PORTABLE!!! */
178void    _sethosthtent(int);
179void    _endhosthtent(void);
180void    _sethostdnsent(int);
181void    _endhostdnsent(void);
182void    _setnethtent(int);
183void    _endnethtent(void);
184void    _setnetdnsent(int);
185void    _endnetdnsent(void);
186struct hostent * _gethostbyhtname(const char *, int);
187struct hostent * _gethostbydnsname(const char *, int);
188struct hostent * _gethostbynisname(const char *, int);
189struct hostent * _gethostbyhtaddr (const char *, int, int);
190struct hostent * _gethostbydnsaddr(const char *, int, int);
191struct hostent * _gethostbynisaddr(const char *, int, int);
192struct netent *  _getnetbyhtname (const char *);
193struct netent *  _getnetbydnsname(const char *);
194struct netent *  _getnetbynisname(const char *);
195struct netent *  _getnetbyhtaddr (unsigned long, int);
196struct netent *  _getnetbydnsaddr(unsigned long, int);
197struct netent *  _getnetbynisaddr(unsigned long, int);
198void _map_v4v6_address(const char *, char *);
199void _map_v4v6_hostent(struct hostent *, char **, int *len);
200__END_DECLS
201
202#endif /* !_NETDB_H_ */
Note: See TracBrowser for help on using the repository browser.