From 4382f7feda0658f7641a87c253204d51dbdd51af Mon Sep 17 00:00:00 2001 From: Konstantin Osipov <kostja@tarantool.org> Date: Mon, 10 Dec 2018 20:50:50 +0300 Subject: [PATCH] sio: remove exceptions Propagate exceptions up to the caller. In scope of #3234 --- src/coio.cc | 3 +++ src/evio.cc | 12 +++++++++--- src/sio.cc | 4 ++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/coio.cc b/src/coio.cc index e91de40b5c..c5bdf4b254 100644 --- a/src/coio.cc +++ b/src/coio.cc @@ -35,6 +35,7 @@ #include <netinet/tcp.h> #include <stdio.h> #include <arpa/inet.h> +#include <errno.h> #include "sio.h" #include "scoped_guard.h" @@ -258,6 +259,8 @@ coio_accept(struct ev_io *coio, struct sockaddr *addr, SOCK_STREAM); return fd; } + if (! sio_wouldblock(errno)) + diag_raise(); /* The socket is not ready, yield */ if (! ev_is_active(coio)) { ev_io_set(coio, coio->fd, EV_READ); diff --git a/src/evio.cc b/src/evio.cc index a6ac65daf8..c0addaf16d 100644 --- a/src/evio.cc +++ b/src/evio.cc @@ -184,8 +184,11 @@ evio_service_accept_cb(ev_loop * /* loop */, ev_io *watcher, fd = sio_accept(service->ev.fd, (struct sockaddr *)&addr, &addrlen); - if (fd < 0) /* EAGAIN, EWOULDLOCK, EINTR */ + if (fd < 0) { + if (! sio_wouldblock(errno)) + diag_raise(); return; + } /* set common client socket options */ evio_setsockopt_client(fd, service->addr.sa_family, SOCK_STREAM); /* @@ -295,8 +298,11 @@ evio_service_listen(struct evio_service *service) int fd = service->ev.fd; if (sio_listen(fd)) { - /* raise for addr in use to */ - tnt_raise(SocketError, sio_socketname(fd), "listen"); + if (diag_is_empty(diag_get())) { + /* Raise for addr in use to */ + diag_set(SocketError, sio_socketname(fd), "listen"); + } + diag_raise(); } ev_io_start(service->loop, &service->ev); } diff --git a/src/sio.cc b/src/sio.cc index 5dcf9fdd19..0c874404ec 100644 --- a/src/sio.cc +++ b/src/sio.cc @@ -203,7 +203,7 @@ sio_listen(int fd) { int rc = listen(fd, sio_listen_backlog()); if (rc < 0 && errno != EADDRINUSE) - tnt_raise(SocketError, sio_socketname(fd), "listen"); + diag_set(SocketError, sio_socketname(fd), "listen"); return rc; } @@ -213,7 +213,7 @@ sio_accept(int fd, struct sockaddr *addr, socklen_t *addrlen) /* Accept a connection. */ int newfd = accept(fd, addr, addrlen); if (newfd < 0 && !sio_wouldblock(errno)) - tnt_raise(SocketError, sio_socketname(fd), "accept"); + diag_set(SocketError, sio_socketname(fd), "accept"); return newfd; } -- GitLab