aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hw/hw.h2
-rw-r--r--migration-tcp.c22
-rw-r--r--vl.c24
3 files changed, 24 insertions, 24 deletions
diff --git a/hw/hw.h b/hw/hw.h
index 8edd7887c3..99d4b8d755 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -34,7 +34,7 @@ QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
QEMUFileCloseFunc *close,
QEMUFileRateLimit *rate_limit);
QEMUFile *qemu_fopen(const char *filename, const char *mode);
-QEMUFile *qemu_fopen_fd(int fd);
+QEMUFile *qemu_fopen_socket(int fd);
void qemu_fflush(QEMUFile *f);
int qemu_fclose(QEMUFile *f);
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
diff --git a/migration-tcp.c b/migration-tcp.c
index a011a53099..64b64d6b98 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -85,10 +85,10 @@ static ssize_t fd_put_buffer(void *opaque, const void *data, size_t size)
do {
ret = send(s->fd, data, size, 0);
- } while (ret == -1 && errno == EINTR);
+ } while (ret == -1 && (socket_error() == EINTR || socket_error() == EWOULDBLOCK));
if (ret == -1)
- ret = -errno;
+ ret = -socket_error();
if (ret == -EAGAIN)
qemu_set_fd_handler2(s->fd, NULL, NULL, fd_put_notify, s);
@@ -123,7 +123,7 @@ static void fd_wait_for_unfreeze(void *opaque)
FD_SET(s->fd, &wfds);
ret = select(s->fd + 1, NULL, &wfds, NULL, NULL);
- } while (ret == -1 && errno == EINTR);
+ } while (ret == -1 && socket_error() == EINTR);
}
static void fd_put_ready(void *opaque)
@@ -178,7 +178,7 @@ static void tcp_wait_for_connect(void *opaque)
dprintf("connect completed\n");
do {
ret = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &val, &valsize);
- } while (ret == -1 && errno == EINTR);
+ } while (ret == -1 && socket_error() == EINTR);
if (ret < 0) {
tcp_error(s);
@@ -273,13 +273,13 @@ MigrationState *tcp_start_outgoing_migration(const char *host_port,
do {
ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr));
if (ret == -1)
- ret = -errno;
+ ret = -socket_error();
- if (ret == -EINPROGRESS)
+ if (ret == -EINPROGRESS || ret == -EWOULDBLOCK)
qemu_set_fd_handler2(s->fd, NULL, NULL, tcp_wait_for_connect, s);
} while (ret == -EINTR);
- if (ret < 0 && ret != -EINPROGRESS) {
+ if (ret < 0 && ret != -EINPROGRESS && ret != -EWOULDBLOCK) {
dprintf("connect failed\n");
close(s->fd);
qemu_free(s);
@@ -300,7 +300,7 @@ static void tcp_accept_incoming_migration(void *opaque)
do {
c = accept(s, (struct sockaddr *)&addr, &addrlen);
- } while (c == -1 && errno == EINTR);
+ } while (c == -1 && socket_error() == EINTR);
dprintf("accepted migration\n");
@@ -309,7 +309,7 @@ static void tcp_accept_incoming_migration(void *opaque)
return;
}
- f = qemu_fopen_fd(c);
+ f = qemu_fopen_socket(c);
if (f == NULL) {
fprintf(stderr, "could not qemu_fopen socket\n");
goto out;
@@ -349,7 +349,7 @@ int tcp_start_incoming_migration(const char *host_port)
s = socket(PF_INET, SOCK_STREAM, 0);
if (s == -1)
- return -errno;
+ return -socket_error();
val = 1;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
@@ -367,5 +367,5 @@ int tcp_start_incoming_migration(const char *host_port)
err:
close(s);
- return -errno;
+ return -socket_error();
}
diff --git a/vl.c b/vl.c
index 74ae652e1e..1fb474925e 100644
--- a/vl.c
+++ b/vl.c
@@ -6252,43 +6252,43 @@ struct QEMUFile {
int has_error;
};
-typedef struct QEMUFileFD
+typedef struct QEMUFileSocket
{
int fd;
QEMUFile *file;
-} QEMUFileFD;
+} QEMUFileSocket;
-static int fd_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
+static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
{
- QEMUFileFD *s = opaque;
+ QEMUFileSocket *s = opaque;
ssize_t len;
do {
- len = read(s->fd, buf, size);
- } while (len == -1 && errno == EINTR);
+ len = recv(s->fd, buf, size, 0);
+ } while (len == -1 && socket_error() == EINTR);
if (len == -1)
- len = -errno;
+ len = -socket_error();
return len;
}
-static int fd_close(void *opaque)
+static int socket_close(void *opaque)
{
- QEMUFileFD *s = opaque;
+ QEMUFileSocket *s = opaque;
qemu_free(s);
return 0;
}
-QEMUFile *qemu_fopen_fd(int fd)
+QEMUFile *qemu_fopen_socket(int fd)
{
- QEMUFileFD *s = qemu_mallocz(sizeof(QEMUFileFD));
+ QEMUFileSocket *s = qemu_mallocz(sizeof(QEMUFileSocket));
if (s == NULL)
return NULL;
s->fd = fd;
- s->file = qemu_fopen_ops(s, NULL, fd_get_buffer, fd_close, NULL);
+ s->file = qemu_fopen_ops(s, NULL, socket_get_buffer, socket_close, NULL);
return s->file;
}