g_socket_listener_accept_socket() で受け入れられる GSocket があります。接続されたクライアントのリモートアドレスを取得したいのですが、次のコードでそれができると思いました:
GSocket *socket;
GSocketAddress *socket_address;
GInetAddress *inet_address;
gchar *ip_addr;
[...]
socket_address = g_socket_get_remote_address(socket_client, &err);
inet_address = g_object_ref(g_inet_socket_address_get_address(G_INET_SOCKET_ADDRESS(socket_address)));
ip_addr = g_inet_address_to_string(inet_address);
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "Login from %s", ip_addr);
g_free(ip_addr);
g_object_unref(socket_address);
ただし、次のエラーが表示されます。
(process:15761): GLib-GIO-CRITICAL **: g_inet_address_to_string: assertion `G_IS_INET_ADDRESS (address)' failed
いくつかのデバッグの後、上記のメッセージは g_inet_address_to_string() によって生成されることが判明しました。
私は何か間違ったことをしていますか?