class Sock already has abstraction of BSD socket interface. But, IP address escapes from this class by returning it as an 4 byte int and sockaddr_in. It is required to check whether there are codes that directly calls BSD socket interface.
 
-{section: The method of Attack}
+{section: The Method of Attack}
 
 Having single IP address class that deals both IPv4 and IPv6. So, nobody uses sockaddr, sockaddr_in, or plain int to represent IP address.
 
@@ -176,6 +176,49 @@
 
 Another reason is that BSD socket interface is kinda universal and well formed. For application socket classes, we already have Sock, ReliSock, and so on. Any abstraction other than proxy between application socket classes and BSD socket interface? I did not find any appealing reason. If you have any idea, please let me know.
 
+Now, I would like to enumerate all the functions that must be addressed in proxy socket interface.
+*:getaddrinfo
+
+Converting existing code to call getaddrinfo() is not trivial as I expected. This function returns addrinfo structure which embeds sockaddr*. Since it is not sockaddr_in(IPv4 address), the caller must check sockaddr::sin_family to see whether it belongs to IPv4 or IPv6 address.
+
+Currently, no Condor source codes call getaddrinfo directly.
+
+This function is replacement of gethostbyname*, getgetservbyname. As noted earlier, there are 165 lines of codes that calling gethostbyname. However, gethostbyname returns struct hostent which does not embed sockaddr but only char* strings. So, these are not really concern.
+
+{code}
+struct hostent *gethostbyname(const char *name);
+
+
+// this code from MSDN. ignore PHOSTENT, and LPHOSTENT. win32 clutters
+typedef struct hostent {
+  char FAR *    h_name;
+  char FAR  FAR **h_aliases;
+  short         h_addrtype;
+  short         h_length;
+  char FAR  FAR **h_addr_list;
+}HOSTENT, *PHOSTENT, FAR *LPHOSTENT;
+
+int getaddrinfo(const char *node,
+                const char *service,
+                const struct addrinfo *hints,
+                struct addrinfo **res);
+
+void freeaddrinfo(struct addrinfo *res);
+
+struct addrinfo {
+    int     ai_flags;
+    int     ai_family;
+    int     ai_socktype;
+    int     ai_protocol;
+    size_t  ai_addrlen;
+    struct sockaddr *ai_addr;
+    char   *ai_canonname; /* canonical name */
+    struct addrinfo *ai_next; /* this struct can form a linked list */
+};
+{endcode}
+
+
+
 {section: Todo}
 Manageable daily work-list.