Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
simdata cleanup from smx_action_t. Now all SIMIX's data structures [Cristian]
[simgrid.git] / src / gras / Virtu / rl_dns.c
1 /* $Id$ */
2
3 /* rl_dns - name resolution (real life)                                     */
4
5 /* Copyright (c) 2003, 2004 Martin Quinson. All rights reserved.            */
6
7 /* This program is free software; you can redistribute it and/or modify it
8  * under the terms of the license (GNU LGPL) which comes with this package. */
9
10 #include "gras/Virtu/virtu_rl.h"
11 #include "portable.h"
12
13 /* A portable DNS resolver is a nightmare to do in a portable manner.
14    keep it simple/stupid for now. */
15
16 const char *gras_os_myname(void)
17 {
18   static char *myname = NULL;
19
20   if (myname)
21     return (const char *) myname;
22
23   myname = xbt_new(char, 255);
24
25   if (gethostname(myname, 255) == -1) {
26 #ifdef HAVE_SYS_SOCKET_H
27     /* gethostname() failed! Trying with localhost instead. 
28        We first need to query the DNS to make sure localhost is resolved 
29        See the note in nws/Portability/dnsutil.c about {end,set}hostent() */
30     struct hostent *tmp;
31     sethostent(0);
32     tmp = gethostbyname("localhost");
33     endhostent();
34
35     if (tmp) {
36       strncat(myname, tmp->h_name, 255);
37     } else {
38       /* Erm. localhost cannot be resolved. There's something wrong in the user DNS setting */
39       sprintf(myname, "(misconfigured host)");
40     }
41 #else
42     sprintf(myname, "(misconfigured windows host)");
43 #endif
44   }
45
46   myname[254] = '\0';
47
48   return myname;
49 }