Added check if socket is connected to prevent sending disconnect

sequence to a closed socket.

git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/rdesktop/trunk@1681 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
Henrik Andersson 2012-11-22 13:38:35 +00:00
parent 91d026f52c
commit 9f174ea864
3 changed files with 13 additions and 1 deletions

View File

@ -207,6 +207,7 @@ STREAM tcp_recv(STREAM s, uint32 length);
RD_BOOL tcp_connect(char *server);
void tcp_disconnect(void);
char *tcp_get_address(void);
RD_BOOL tcp_is_connected(void);
void tcp_reset_state(void);
RD_BOOL tcp_tls_connect(void);
RD_BOOL tcp_tls_get_server_pubkey(STREAM s);

View File

@ -1023,7 +1023,8 @@ main(int argc, char *argv[])
rdp_main_loop(&deactivated, &ext_disc_reason);
DEBUG(("Disconnecting...\n"));
rdp_disconnect();
if (!tcp_is_connected())
rdp_disconnect();
if (g_redirect)
continue;

10
tcp.c
View File

@ -515,6 +515,16 @@ tcp_get_address()
return ipaddr;
}
RD_BOOL
tcp_is_connected()
{
struct sockaddr_in sockaddr;
socklen_t len = sizeof(sockaddr);
if (getpeername(g_sock, (struct sockaddr *) &sockaddr, &len))
return True;
return False;
}
/* reset the state of the tcp layer */
/* Support for Session Directory */
void