}
#endif
+static void
+g_set_error_from_last_error (GError **error)
+{
+ int code;
+
+#ifdef G_OS_WIN32
+ int err = WSAGetLastError ();
+#else
+ int err = h_errno;
+#endif
+
+ switch (err)
+ {
+ case HOST_NOT_FOUND:
+ code = G_IO_ERROR_RESOLVER_NOT_FOUND;
+ break;
+ case NO_DATA:
+ code = G_IO_ERROR_RESOLVER_NO_DATA;
+ break;
+ default:
+ g_warning ("unknown h_errno code encountered");
+ }
+
+#ifdef G_OS_WIN32
+ g_set_error (error, G_IO_ERROR, code, winsock_error_message (err));
+#else
+ g_set_error (error, G_IO_ERROR, code, hstrerror (err));
+#endif
+}
+
#if !defined(HAVE_GETADDRINFO)
static GList *
hostent2list (const struct hostent *he)
struct hostent *he = gethostbyname (hostname);
if (!he)
- {
- if (error)
- *error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, winsock_error_message (WSAGetLastError ()));
- }
+ g_set_error_from_last_error (error);
else
list = hostent2list (he);
}
if (!rv)
list = hostent2list (he);
+ else
+ g_set_error_from_last_error (error);
g_free (buf);
}
if (he)
list = hostent2list (&result);
+ else
+ g_set_error_from_last_error (error);
g_free (buf);
}
if (!rv)
list = hostent2list (&he);
+ else
+ g_set_error_from_last_error (error);
}
#else
{
#endif
he = gethostbyname (hostname);
- list = hostent2list (he);
+ if (he)
+ list = hostent2list (he);
+ else
+ g_set_error_from_last_error (error);
#ifdef HAVE_GETHOSTBYNAME_R_GLIB_MUTEX
G_UNLOCK (dnslock);
if (list)
list = g_list_reverse (list);
- if (!list && error)
- *error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, winsock_error_message (WSAGetLastError ()));
-
return list;
}
GType g_socket_get_type (void) G_GNUC_CONST;
+GSocket * g_socket_new ();
+
+void g_socket_bind (GSocket *socket, GInetAddress *address);
+
+GSocket * g_socket_accept (GSocket *socket);
+
+void g_socket_accept_async (GSocket *socket);
+
+GSocket * g_socket_accept_finish (GSocket *socket);
+
+void g_socket_listen (GSocket *socket, int backlog);
+
G_END_DECLS
#endif /* G_SOCKET_H */