From c7147f5ccc6d0fa4a019c54166085a36f86a1bf0 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Mon, 23 Aug 2010 20:07:01 +0200 Subject: Moved server_sync() to server_communication.c. --- server_communication.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 server_communication.c (limited to 'server_communication.c') diff --git a/server_communication.c b/server_communication.c new file mode 100644 index 0000000..227eb8f --- /dev/null +++ b/server_communication.c @@ -0,0 +1,61 @@ +#include "server_communication.h" + +#include + +gboolean server_sync(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 FALSE; + } + + if(conn == NULL) { + g_warning(conn_error->message); + g_error_free(conn_error); + return FALSE; + } + + GSocket *socket = g_socket_connection_get_socket(conn); + + g_debug("connected"); + + 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; +} + -- cgit v1.2.3