{section: currently working on}
 
-{subsection: Link error}
-
-Mar, 9 : resolved some errors. condor_getaddrinfo, condor_getnameinfo
-Mar, 12 : most of errors are resolved. get_full_hostname should be converted.
-
-{code}
-/u/m/_/m/ron_ws/src/condor_util_lib/internet.c:1024: undefined reference to `my_ip_addr'
-../condor_c++_util/cplus_lib.a(my_hostname.o): In function `init_full_hostname':
-/u/m/_/m/ron_ws/src/condor_c++_util/my_hostname.cpp:140: undefined reference to `get_full_hostname_ipv6(char const*, ipaddr&)'
-../condor_c++_util/cplus_lib.a(my_hostname.o): In function `init_ipaddr':
-/u/m/_/m/ron_ws/src/condor_c++_util/my_hostname.cpp:209: undefined reference to `get_full_hostname_ipv6(char const*, ipaddr&)'
-../condor_io/libcedar.a(sock.o): In function `Sock::get_port()':
-/u/m/_/m/ron_ws/src/condor_io/sock.cpp:1952: undefined reference to `condor_getsockname(int, ipaddr&)'
-../condor_io/libcedar.a(sock.o): In function `Sock::bindWithin(int, int, bool)':
-/u/m/_/m/ron_ws/src/condor_io/sock.cpp:447: undefined reference to `ipv6_my_ip_addr()'
-../condor_io/libcedar.a(sock.o): In function `Sock::bind(bool, int, bool)':
-/u/m/_/m/ron_ws/src/condor_io/sock.cpp:579: undefined reference to `ipv6_my_ip_addr()'
-../condor_io/libcedar.a(sock.o): In function `Sock::do_connect(char const*, int, bool)':
-/u/m/_/m/ron_ws/src/condor_io/sock.cpp:752: undefined reference to `ipaddr::ipaddr(sockaddr*)'
-../condor_io/libcedar.a(condor_auth_x509.o): In function `getDaemonList(ReliSock*)':
-/u/m/_/m/ron_ws/src/condor_io/condor_auth_x509.cpp:480: undefined reference to `ipaddr::to_hostname(char*, int) const'
-collect2: ld returned 1 exit status
-{endcode}
-
 {section: Note for constants}
 Don't forget constants that should be adjusted!
 
@@ -64,8 +40,36 @@
 
 Original implementation was just re-invention of inet_ntop()/inet_ntoa(). So, I replaced to new implementation that calls inet_ntop() twice. (with AF_INET and AF_INET6)
 
+{subsection: struct hostent}
+
+I Initially only looked at struct sockaddr_in. I wrote class ipaddr for replacement. However, it is only half of the world. I should devise IPv6 compliant structure for struct hostent and make it obsolete. I think it would make more sense if we have class ipaddr and class MyString instead of sockaddr* and char*. Write here some design possibilities!
+
+{code}
+// from MSDN
+typedef struct hostent {
+  char FAR      *h_name;
+  char FAR  FAR **h_aliases;
+  short         h_addrtype;
+  short         h_length;
+  char FAR  FAR **h_addr_list;
+}
+
+typedef struct addrinfo {
+  int             ai_flags;
+  int             ai_family;
+  int             ai_socktype;
+  int             ai_protocol;
+  size_t          ai_addrlen;
+  char            *ai_canonname;
+  struct sockaddr *ai_addr;
+  struct addrinfo *ai_next;
+}
+{endcode}
+
 {subsection: get_full_hostname}
 
+my_ip_addr, my_hostname, my_full_hostname() and get_full_hostname() are now obsolete. Now, implementing ipv6_hostname.{h/cpp}.
+
 It uses gethostbyname() which has been obsoleted. It should call getaddrinfo() instead. The function has about 150-200 lines of code. At the end of function, it tail-calls get_full_hostname_from_hostent(). struct hostent is also deprecated structure.
 
 It requires overhaul from interface to implementation.