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:
parent
0854c83076
commit
71180e6753
|
@ -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_
|
||||||
|
|
Loading…
Reference in New Issue