diff options
author | Marek Vrbka <marek.vrbka@codasip.com> | 2023-05-30 10:07:18 +0200 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2023-06-10 17:10:07 +0000 |
commit | 71180e67537117f841ff5dd7c359e3678d861e2b (patch) | |
tree | 496c9d957de5ab7078d24e16beca5aec582e492e /src | |
parent | 0854c83076749196603bebdb47ec93f50a454f79 (diff) | |
download | riscv-openocd-71180e67537117f841ff5dd7c359e3678d861e2b.zip riscv-openocd-71180e67537117f841ff5dd7c359e3678d861e2b.tar.gz riscv-openocd-71180e67537117f841ff5dd7c359e3678d861e2b.tar.bz2 |
gdb_server: refactor and unify function gdb_get_char_inner
The old implementation of gdb socket error handling
in the gdb_get_char_inner() differs between Windows and *nix
platforms. This patch simplifies it by using an existing
function log_socket_error() which handles most of the platform
specific things. It also provides better error messages.
Change-Id: Iec871c4965b116dc7cfb03c3565bab66c8b41958
Signed-off-by: Marek Vrbka <marek.vrbka@codasip.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/7724
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/server/gdb_server.c | 43 |
1 files changed, 12 insertions, 31 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 0baf755..702dbef 100644 --- a/src/server/gdb_server.c +++ b/src/server/gdb_server.c @@ -235,39 +235,20 @@ static int gdb_get_char_inner(struct connection *connection, int *next_char) } #ifdef _WIN32 - errno = WSAGetLastError(); - - switch (errno) { - case WSAEWOULDBLOCK: - usleep(1000); - break; - case WSAECONNABORTED: - gdb_con->closed = true; - return ERROR_SERVER_REMOTE_CLOSED; - case WSAECONNRESET: - gdb_con->closed = true; - return ERROR_SERVER_REMOTE_CLOSED; - default: - LOG_ERROR("read: %d", errno); - exit(-1); - } + bool retry = (WSAGetLastError() == WSAEWOULDBLOCK); #else - switch (errno) { - case EAGAIN: - usleep(1000); - break; - case ECONNABORTED: - gdb_con->closed = true; - return ERROR_SERVER_REMOTE_CLOSED; - case ECONNRESET: - gdb_con->closed = true; - return ERROR_SERVER_REMOTE_CLOSED; - default: - LOG_ERROR("read: %s", strerror(errno)); - gdb_con->closed = true; - return ERROR_SERVER_REMOTE_CLOSED; - } + bool retry = (errno == EAGAIN); #endif + + if (retry) { + // Try again after a delay + usleep(1000); + } else { + // Print error and close the socket + log_socket_error("GDB"); + gdb_con->closed = true; + return ERROR_SERVER_REMOTE_CLOSED; + } } #ifdef _DEBUG_GDB_IO_ |