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>
This commit is contained in:
Marek Vrbka 2023-05-30 10:07:18 +02:00 committed by Antonio Borneo
parent 0854c83076
commit 71180e6753
1 changed files with 12 additions and 31 deletions

View File

@ -235,39 +235,20 @@ static int gdb_get_char_inner(struct connection *connection, int *next_char)
} }
#ifdef _WIN32 #ifdef _WIN32
errno = WSAGetLastError(); bool retry = (WSAGetLastError() == WSAEWOULDBLOCK);
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);
}
#else #else
switch (errno) { bool retry = (errno == EAGAIN);
case EAGAIN: #endif
if (retry) {
// Try again after a delay
usleep(1000); usleep(1000);
break; } else {
case ECONNABORTED: // Print error and close the socket
gdb_con->closed = true; log_socket_error("GDB");
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; gdb_con->closed = true;
return ERROR_SERVER_REMOTE_CLOSED; return ERROR_SERVER_REMOTE_CLOSED;
} }
#endif
} }
#ifdef _DEBUG_GDB_IO_ #ifdef _DEBUG_GDB_IO_