From: Denis Fokin Date: Sun, 15 Mar 2015 15:49:30 +0000 (+0200) Subject: Properly close socket on WIN32 to allow accepting further connections X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=9b2f8930538630db8537b8c5601e8c4a9c074657;p=fw%2Fstlink Properly close socket on WIN32 to allow accepting further connections --- diff --git a/gdbserver/gdb-server.c b/gdbserver/gdb-server.c index daacb85..b1cea5c 100644 --- a/gdbserver/gdb-server.c +++ b/gdbserver/gdb-server.c @@ -733,6 +733,9 @@ int serve(stlink_t *sl, st_state_t *st) { int status = gdb_recv_packet(client, &packet); if(status < 0) { ELOG("cannot recv: %d\n", status); +#ifdef __MINGW32__ + win32_close_socket(sock); +#endif return 1; } @@ -942,6 +945,9 @@ int serve(stlink_t *sl, st_state_t *st) { int status = gdb_check_for_interrupt(client); if(status < 0) { ELOG("cannot check for int: %d\n", status); +#ifdef __MINGW32__ + win32_close_socket(sock); +#endif return 1; } @@ -1256,6 +1262,9 @@ int serve(stlink_t *sl, st_state_t *st) { ELOG("cannot send: %d\n", result); free(reply); free(packet); +#ifdef __MINGW32__ + win32_close_socket(sock); +#endif return 1; } @@ -1265,5 +1274,9 @@ int serve(stlink_t *sl, st_state_t *st) { free(packet); } +#ifdef __MINGW32__ + win32_close_socket(sock); +#endif + return 0; } diff --git a/mingw/mingw.c b/mingw/mingw.c index 266a87c..3c5d025 100644 --- a/mingw/mingw.c +++ b/mingw/mingw.c @@ -163,14 +163,16 @@ win32_shutdown(SOCKET fd, int mode) } return rc; } -int win32_close_socket(SOCKET fd) { - int rc; - rc = closesocket(fd); +int win32_close_socket(SOCKET fd) +{ + int rc = closesocket(fd); + if(rc == SOCKET_ERROR) { + set_socket_errno(WSAGetLastError()); + } return rc; } - ssize_t win32_write_socket(SOCKET fd, void *buf, int n) { int rc = send(fd, buf, n, 0); diff --git a/mingw/mingw.h b/mingw/mingw.h index 28c7a82..1fcf93d 100644 --- a/mingw/mingw.h +++ b/mingw/mingw.h @@ -54,6 +54,7 @@ SOCKET win32_socket(int, int, int); int win32_connect(SOCKET, struct sockaddr*, socklen_t); SOCKET win32_accept(SOCKET, struct sockaddr*, socklen_t *); int win32_shutdown(SOCKET, int); +int win32_close_socket(SOCKET fd); #define strtok_r(x, y, z) win32_strtok_r(x, y, z) #define strsep(x,y) win32_strsep(x,y)