+ return TRUE;
+}
+
+/* Return remote port by socket. */
+
+SilcUInt16 silc_net_get_remote_port(SilcSocket sock)
+{
+#ifdef HAVE_IPV6
+ struct sockaddr_storage remote;
+ int len;
+ char s[NI_MAXSERV];
+
+ memset(&remote, 0, sizeof(remote));
+ len = sizeof(remote);
+ if (getpeername(sock, (struct sockaddr *)&remote, &len) < 0)
+ return 0;
+
+ if (getnameinfo((struct sockaddr *)&remote, len, NULL, 0, s, sizeof(s),
+ NI_NUMERICSERV))
+ return 0;
+
+ return atoi(s);
+#else
+ struct sockaddr_in remote;
+ int len;
+
+ memset(&remote, 0, sizeof(remote));
+ len = sizeof(remote);
+ if (getpeername(sock, (struct sockaddr *)&remote, &len) < 0)
+ return 0;
+
+ return ntohs(remote.sin_port);
+#endif
+}
+
+/* Return local port by socket. */
+
+SilcUInt16 silc_net_get_local_port(SilcSocket sock)
+{
+#ifdef HAVE_IPV6
+ struct sockaddr_storage local;
+ int len;
+ char s[NI_MAXSERV];
+
+ memset(&local, 0, sizeof(local));
+ len = sizeof(local);
+ if (getsockname(sock, (struct sockaddr *)&local, &len) < 0)
+ return 0;
+
+ if (getnameinfo((struct sockaddr *)&local, len, NULL, 0, s, sizeof(s),
+ NI_NUMERICSERV))
+ return 0;
+
+ return atoi(s);
+#else
+ struct sockaddr_in local;
+ int len;
+
+ memset(&local, 0, sizeof(local));
+ len = sizeof(local);
+ if (getsockname(sock, (struct sockaddr *)&local, &len) < 0)
+ return 0;
+
+ return ntohs(local.sin_port);
+#endif
+}
+#endif /* !SILC_SYMBIAN */
+
+/* Return name of localhost. */
+
+char *silc_net_localhost(void)
+{
+ char hostname[256], ip_addr[64];
+
+ if (gethostname(hostname, sizeof(hostname)))
+ return NULL;
+
+ if (!silc_net_gethostbyname(hostname, TRUE, ip_addr, sizeof(ip_addr)))
+ return silc_strdup(hostname);
+
+ silc_net_gethostbyaddr(ip_addr, hostname, sizeof(hostname));
+ return silc_strdup(hostname);
+}
+
+/* Returns local IP address */
+
+char *silc_net_localip(void)
+{
+ char hostname[256], ip_addr[64];
+
+ if (gethostname(hostname, sizeof(hostname)))
+ return NULL;
+
+ if (!silc_net_gethostbyname(hostname, TRUE, ip_addr, sizeof(ip_addr)))
+ return NULL;
+
+ return silc_strdup(ip_addr);