diff --git a/include/rfbclient.h b/include/rfbclient.h index 073ba03..d0f2ccc 100644 --- a/include/rfbclient.h +++ b/include/rfbclient.h @@ -610,7 +610,7 @@ extern rfbBool SendClientCutText(rfbClient* client,char *str, int len); */ extern rfbBool HandleRFBServerMessage(rfbClient* client); -extern void ReadToBuffer(rfbClient* client); +extern rfbBool ReadToBuffer(rfbClient* client); /** * Sends a text chat message to the server. diff --git a/src/sockets.c b/src/sockets.c index a5901c5..7d8244b 100644 --- a/src/sockets.c +++ b/src/sockets.c @@ -38,9 +38,9 @@ void run_main_loop_once(void); rfbBool errorMessageOnReadFailure = TRUE; -void ReadToBuffer(rfbClient* client) { +rfbBool ReadToBuffer(rfbClient* client) { if (client->buffered == RFB_BUF_SIZE) - return; + return FALSE; ssize_t size; @@ -61,8 +61,13 @@ void ReadToBuffer(rfbClient* client) { RFB_BUF_SIZE - client->buffered, MSG_DONTWAIT); } + if (size == 0) + return FALSE; + if (size > 0) client->buffered += size; + + return TRUE; } rfbBool ReadFromRFBServer(rfbClient* client, char *out, unsigned int n) @@ -73,7 +78,8 @@ rfbBool ReadFromRFBServer(rfbClient* client, char *out, unsigned int n) while (n != 0) { while (n != 0 && client->buffered == 0) { run_main_loop_once(); - ReadToBuffer(client); + if (!ReadToBuffer(client)) + return FALSE; } unsigned int size = MIN(client->buffered, n); diff --git a/src/vnc.c b/src/vnc.c index 5ad9151..100ec35 100644 --- a/src/vnc.c +++ b/src/vnc.c @@ -385,7 +385,8 @@ const char* vnc_client_get_desktop_name(const struct vnc_client* self) int vnc_client_process(struct vnc_client* self) { - ReadToBuffer(self->client); + if (!ReadToBuffer(self->client)) + return -1; if (!vnc_client_lock_handler(self)) return 0;