| 446 | } |
| 447 | |
| 448 | void resolverCallback(GObject *source_object, GAsyncResult *result, gpointer user_data) |
| 449 | { |
| 450 | xsSocket xss = (xsSocket)user_data; |
| 451 | GResolver *resolver = (GResolver*)source_object; |
| 452 | char *ip = NULL; |
| 453 | GList *addresses = NULL; |
| 454 | GInetAddress *address = NULL; |
| 455 | |
| 456 | addresses = g_resolver_lookup_by_name_finish(resolver, result, NULL); |
| 457 | while (NULL != addresses) { |
| 458 | address = (GInetAddress*)addresses->data; |
| 459 | if (NULL != address && |
| 460 | g_inet_address_get_family(address) == G_SOCKET_FAMILY_IPV4) { |
| 461 | ip = g_inet_address_to_string(address); |
| 462 | break; |
| 463 | } |
| 464 | addresses = addresses->next; |
| 465 | } |
| 466 | |
| 467 | if (NULL != ip) { |
| 468 | struct sockaddr_in addr; |
| 469 | int result; |
| 470 | c_memset(&addr, 0, sizeof(addr)); |
| 471 | addr.sin_family = AF_INET; |
| 472 | c_memcpy(&(addr.sin_addr), g_inet_address_to_bytes(address), g_inet_address_get_native_size(address)); |
| 473 | addr.sin_port = htons(xss->port); |
| 474 | result = connect(xss->skt, (struct sockaddr*)&addr, sizeof(addr)); |
| 475 | if (result >= 0) { |
| 476 | xss->connected = true; |
| 477 | modMessagePostToMachine(xss->the, NULL, 0, socketConnected, xss); |
| 478 | } |
| 479 | g_free(ip); |
| 480 | } |
| 481 | |
| 482 | if (NULL != addresses) |
| 483 | g_resolver_free_addresses(addresses); |
| 484 | g_object_unref(resolver); |
| 485 | } |
| 486 | |
| 487 | void doDestructor(xsSocket xss) |
| 488 | { |
nothing calls this directly
no test coverage detected