+ g_return_if_fail(ip != NULL || unix_socket != NULL);
+
+ signal_emit("server connecting", 2, server, ip);
+
+ if (ip != NULL) {
+ own_ip = ip == NULL ? NULL :
+ (IPADDR_IS_V6(ip) ? server->connrec->own_ip6 :
+ server->connrec->own_ip4);
+ port = server->connrec->proxy != NULL ?
+ server->connrec->proxy_port : server->connrec->port;
+ handle = server->connrec->use_ssl ?
+ net_connect_ip_ssl(ip, port, own_ip) :
+ net_connect_ip(ip, port, own_ip);
+ } else {
+ handle = net_connect_unix(unix_socket);
+ }
+
+ if (handle == NULL) {
+ /* failed */
+ if (server->connrec->use_ssl && errno == ENOSYS)
+ server->no_reconnect = TRUE;
+
+ server->connection_lost = TRUE;
+ server_connect_failed(server, g_strerror(errno));
+ } else {
+ server->handle = net_sendbuffer_create(handle, 0);
+ server->connect_tag =
+ g_input_add(handle, G_INPUT_WRITE | G_INPUT_READ,
+ (GInputFunction)
+ server_connect_callback_init,
+ server);
+ }
+}
+
+static void server_connect_callback_readpipe(SERVER_REC *server)
+{
+ RESOLVED_IP_REC iprec;
+ IPADDR *ip;
+ const char *errormsg;
+ char *servername = NULL;