#include "server_communication.h" #include static GSocket *server_connect(struct server *server) { GError *error = NULL, *conn_error = NULL; GSocketConnectable *addr; GSocketAddressEnumerator *enumerator; GSocketAddress *sockaddr; GSocketConnection *conn = NULL; GSocketClient *client; GTimer *timer = g_timer_new(); addr = g_network_address_new(server->host, server->port); enumerator = g_socket_connectable_enumerate(addr); g_object_unref(addr); client = g_socket_client_new(); while(conn == NULL && (sockaddr = g_socket_address_enumerator_next(enumerator, NULL, &error))) { conn = g_socket_client_connect(client, (GSocketConnectable*)sockaddr, NULL, &conn_error); g_object_unref(sockaddr); } if(sockaddr == NULL) { if(error != NULL) { g_warning(error->message); g_error_free(error); } else { g_warning("server_sync: no connectable addresses found for host %s", server->host); } return NULL; } if(conn == NULL) { g_warning(conn_error->message); g_error_free(conn_error); return NULL; } GSocket *socket = g_socket_connection_get_socket(conn); g_debug("connected"); return socket; } gboolean server_sync(struct server *server) { GSocket *socket = server_connect(server); if(socket == NULL) { return FALSE; } g_socket_send(socket, "ping\n", 5, NULL, NULL); gchar buffer[0x400]; g_socket_receive(socket, buffer, 0x400, NULL, NULL); if(buffer[4] == '\n') { buffer[4] = '\0'; g_debug("got response: %s", buffer); g_debug("time: %f ms", g_timer_elapsed(timer, NULL) * 1000); } g_timer_destroy(timer); g_socket_close(socket, NULL); return TRUE; }