|
|
|
@ -28,6 +28,28 @@ |
|
|
|
#include "trace.h" |
|
|
|
|
|
|
|
|
|
|
|
struct SocketOutgoingArgs { |
|
|
|
SocketAddress *saddr; |
|
|
|
} outgoing_args; |
|
|
|
|
|
|
|
void socket_send_channel_create(QIOTaskFunc f, void *data) |
|
|
|
{ |
|
|
|
QIOChannelSocket *sioc = qio_channel_socket_new(); |
|
|
|
qio_channel_socket_connect_async(sioc, outgoing_args.saddr, |
|
|
|
f, data, NULL, NULL); |
|
|
|
} |
|
|
|
|
|
|
|
int socket_send_channel_destroy(QIOChannel *send) |
|
|
|
{ |
|
|
|
/* Remove channel */ |
|
|
|
object_unref(OBJECT(send)); |
|
|
|
if (outgoing_args.saddr) { |
|
|
|
qapi_free_SocketAddress(outgoing_args.saddr); |
|
|
|
outgoing_args.saddr = NULL; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
static SocketAddress *tcp_build_address(const char *host_port, Error **errp) |
|
|
|
{ |
|
|
|
SocketAddress *saddr; |
|
|
|
@ -95,6 +117,11 @@ static void socket_start_outgoing_migration(MigrationState *s, |
|
|
|
struct SocketConnectData *data = g_new0(struct SocketConnectData, 1); |
|
|
|
|
|
|
|
data->s = s; |
|
|
|
|
|
|
|
/* in case previous migration leaked it */ |
|
|
|
qapi_free_SocketAddress(outgoing_args.saddr); |
|
|
|
outgoing_args.saddr = saddr; |
|
|
|
|
|
|
|
if (saddr->type == SOCKET_ADDRESS_TYPE_INET) { |
|
|
|
data->hostname = g_strdup(saddr->u.inet.host); |
|
|
|
} |
|
|
|
@ -106,7 +133,6 @@ static void socket_start_outgoing_migration(MigrationState *s, |
|
|
|
data, |
|
|
|
socket_connect_data_free, |
|
|
|
NULL); |
|
|
|
qapi_free_SocketAddress(saddr); |
|
|
|
} |
|
|
|
|
|
|
|
void tcp_start_outgoing_migration(MigrationState *s, |
|
|
|
|