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
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_