Commit b16a44e1 authored by Daniel P. Berrangé's avatar Daniel P. Berrangé
Browse files

osdep: remove use of socket_error() from all code



Now that QEMU wraps the Win32 sockets methods to automatically
set errno upon failure, there is no reason for callers to use
the socket_error() method. They can rely on accessing errno
even on Win32. Remove all use of socket_error() from general
code, leaving it as a static method in oslib-win32.c only.

Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
parent a2d96af4
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -615,14 +615,13 @@ static coroutine_fn int send_co_req(int sockfd, SheepdogReq *hdr, void *data,
    ret = qemu_co_send(sockfd, hdr, sizeof(*hdr));
    if (ret != sizeof(*hdr)) {
        error_report("failed to send a req, %s", strerror(errno));
        ret = -socket_error();
        return ret;
        return -errno;
    }

    ret = qemu_co_send(sockfd, data, *wlen);
    if (ret != *wlen) {
        ret = -socket_error();
        error_report("failed to send a req, %s", strerror(errno));
        return -errno;
    }

    return ret;
+0 −2
Original line number Diff line number Diff line
@@ -40,8 +40,6 @@ void os_daemonize(void);
void os_setup_post(void);
int os_mlock(void);

#define socket_error() errno

#define closesocket(s) close(s)
#define ioctlsocket(s, r, v) ioctl(s, r, v)

+0 −2
Original line number Diff line number Diff line
@@ -55,8 +55,6 @@ struct tm *gmtime_r(const time_t *timep, struct tm *result);
struct tm *localtime_r(const time_t *timep, struct tm *result);
#endif /* CONFIG_LOCALTIME_R */

int socket_error(void);

static inline void os_setup_signal_handling(void) {}
static inline void os_daemonize(void) {}
static inline void os_setup_post(void) {}
+19 −19
Original line number Diff line number Diff line
@@ -82,11 +82,11 @@ qio_channel_socket_set_fd(QIOChannelSocket *sioc,

    if (getpeername(fd, (struct sockaddr *)&sioc->remoteAddr,
                    &sioc->remoteAddrLen) < 0) {
        if (socket_error() == ENOTCONN) {
        if (errno == ENOTCONN) {
            memset(&sioc->remoteAddr, 0, sizeof(sioc->remoteAddr));
            sioc->remoteAddrLen = sizeof(sioc->remoteAddr);
        } else {
            error_setg_errno(errp, socket_error(),
            error_setg_errno(errp, errno,
                             "Unable to query remote socket address");
            goto error;
        }
@@ -94,7 +94,7 @@ qio_channel_socket_set_fd(QIOChannelSocket *sioc,

    if (getsockname(fd, (struct sockaddr *)&sioc->localAddr,
                    &sioc->localAddrLen) < 0) {
        error_setg_errno(errp, socket_error(),
        error_setg_errno(errp, errno,
                         "Unable to query local socket address");
        goto error;
    }
@@ -356,7 +356,7 @@ qio_channel_socket_accept(QIOChannelSocket *ioc,
                           &cioc->remoteAddrLen);
    if (cioc->fd < 0) {
        trace_qio_channel_socket_accept_fail(ioc);
        if (socket_error() == EINTR) {
        if (errno == EINTR) {
            goto retry;
        }
        goto error;
@@ -364,7 +364,7 @@ qio_channel_socket_accept(QIOChannelSocket *ioc,

    if (getsockname(cioc->fd, (struct sockaddr *)&cioc->localAddr,
                    &cioc->localAddrLen) < 0) {
        error_setg_errno(errp, socket_error(),
        error_setg_errno(errp, errno,
                         "Unable to query local socket address");
        goto error;
    }
@@ -478,14 +478,14 @@ static ssize_t qio_channel_socket_readv(QIOChannel *ioc,
 retry:
    ret = recvmsg(sioc->fd, &msg, sflags);
    if (ret < 0) {
        if (socket_error() == EAGAIN) {
        if (errno == EAGAIN) {
            return QIO_CHANNEL_ERR_BLOCK;
        }
        if (socket_error() == EINTR) {
        if (errno == EINTR) {
            goto retry;
        }

        error_setg_errno(errp, socket_error(),
        error_setg_errno(errp, errno,
                         "Unable to read from socket");
        return -1;
    }
@@ -537,13 +537,13 @@ static ssize_t qio_channel_socket_writev(QIOChannel *ioc,
 retry:
    ret = sendmsg(sioc->fd, &msg, 0);
    if (ret <= 0) {
        if (socket_error() == EAGAIN) {
        if (errno == EAGAIN) {
            return QIO_CHANNEL_ERR_BLOCK;
        }
        if (socket_error() == EINTR) {
        if (errno == EINTR) {
            goto retry;
        }
        error_setg_errno(errp, socket_error(),
        error_setg_errno(errp, errno,
                         "Unable to write to socket");
        return -1;
    }
@@ -569,16 +569,16 @@ static ssize_t qio_channel_socket_readv(QIOChannel *ioc,
                   iov[i].iov_len,
                   0);
        if (ret < 0) {
            if (socket_error() == EAGAIN) {
            if (errno == EAGAIN) {
                if (done) {
                    return done;
                } else {
                    return QIO_CHANNEL_ERR_BLOCK;
                }
            } else if (socket_error() == EINTR) {
            } else if (errno == EINTR) {
                goto retry;
            } else {
                error_setg_errno(errp, socket_error(),
                error_setg_errno(errp, errno,
                                 "Unable to read from socket");
                return -1;
            }
@@ -611,16 +611,16 @@ static ssize_t qio_channel_socket_writev(QIOChannel *ioc,
                   iov[i].iov_len,
                   0);
        if (ret < 0) {
            if (socket_error() == EAGAIN) {
            if (errno == EAGAIN) {
                if (done) {
                    return done;
                } else {
                    return QIO_CHANNEL_ERR_BLOCK;
                }
            } else if (socket_error() == EINTR) {
            } else if (errno == EINTR) {
                goto retry;
            } else {
                error_setg_errno(errp, socket_error(),
                error_setg_errno(errp, errno,
                                 "Unable to write to socket");
                return -1;
            }
@@ -692,7 +692,7 @@ qio_channel_socket_close(QIOChannel *ioc,
#endif
        if (closesocket(sioc->fd) < 0) {
            sioc->fd = -1;
            error_setg_errno(errp, socket_error(),
            error_setg_errno(errp, errno,
                             "Unable to close socket");
            return -1;
        }
@@ -723,7 +723,7 @@ qio_channel_socket_shutdown(QIOChannel *ioc,
    }

    if (shutdown(sioc->fd, sockhow) < 0) {
        error_setg_errno(errp, socket_error(),
        error_setg_errno(errp, errno,
                         "Unable to shutdown socket");
        return -1;
    }
+6 −8
Original line number Diff line number Diff line
@@ -53,18 +53,16 @@ static ssize_t socket_writev_buffer(void *opaque, struct iovec *iov, int iovcnt,
        }

        if (size > 0) {
            err = socket_error();

            if (err != EAGAIN && err != EWOULDBLOCK) {
            if (errno != EAGAIN && errno != EWOULDBLOCK) {
                error_report("socket_writev_buffer: Got err=%d for (%zu/%zu)",
                             err, (size_t)size, (size_t)len);
                             errno, (size_t)size, (size_t)len);
                /*
                 * If I've already sent some but only just got the error, I
                 * could return the amount validly sent so far and wait for the
                 * next call to report the error, but I'd rather flag the error
                 * immediately.
                 */
                return -err;
                return -errno;
            }

            /* Emulate blocking */
@@ -99,15 +97,15 @@ static ssize_t socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
        if (len != -1) {
            break;
        }
        if (socket_error() == EAGAIN) {
        if (errno == EAGAIN) {
            yield_until_fd_readable(s->fd);
        } else if (socket_error() != EINTR) {
        } else if (errno != EINTR) {
            break;
        }
    }

    if (len == -1) {
        len = -socket_error();
        len = -errno;
    }
    return len;
}
Loading