From c0e55f6b666c3a1bb7b0b9efbc88d4ff5adf3e19 Mon Sep 17 00:00:00 2001
From: Thulinma <jaron@vietors.com>
Date: Mon, 8 Nov 2010 21:45:39 +0100
Subject: [PATCH] Gadver

---
 util/ddv_socket.cpp | 17 ++++++++++++++---
 util/flv_sock.cpp   | 16 ++++++++++------
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/util/ddv_socket.cpp b/util/ddv_socket.cpp
index eaff2fc2..f3da0b2f 100644
--- a/util/ddv_socket.cpp
+++ b/util/ddv_socket.cpp
@@ -94,12 +94,23 @@ bool DDV_ready(int sock){
   fcntl(sock, F_SETFL, postflags);
   int r = recv(sock, &tmp, 1, MSG_PEEK);
   fcntl(sock, F_SETFL, preflags);
-  if (r != 1){
-    fprintf(stderr, "Er ging iets mis... %i\n", r);
-  }
   return (r == 1);
 }
 
+int DDV_readycount(int sock){
+  static tmp[1048576];
+  int preflags = fcntl(sock, F_GETFL, 0);
+  int postflags = preflags | O_NONBLOCK;
+  fcntl(sock, F_SETFL, postflags);
+  int r = recv(sock, tmp, 1048576, MSG_PEEK);
+  fcntl(sock, F_SETFL, preflags);
+  if (r > 0){
+    return r;
+  }else{
+    return 0;
+  }
+}
+
 bool DDV_read(void * buffer, int todo, int sock){
   int sofar = 0;
   socketBlocking = false;
diff --git a/util/flv_sock.cpp b/util/flv_sock.cpp
index 4725b8d6..fe4912f1 100644
--- a/util/flv_sock.cpp
+++ b/util/flv_sock.cpp
@@ -34,13 +34,17 @@ bool FLV_Isheader(char * header){
 bool ReadUntil(char * buffer, unsigned int count, unsigned int & sofar, int sock){
   if (sofar >= count){return true;}
   fprintf(stderr, "Reading %i/%i\n", sofar, count);
-  bool r = DDV_read(buffer + sofar,count-sofar,sock);
-  sofar = count;
-  if (!r){
-    All_Hell_Broke_Loose = true;
-    fprintf(stderr, "ReadUntil fail: %s. All Hell Broke Loose!\n", strerror(errno));
+  if (DDV_readycount(sock) >= count-sofar){
+    bool r = DDV_read(buffer + sofar,count-sofar,sock);
+    sofar = count;
+    if (!r){
+      All_Hell_Broke_Loose = true;
+      fprintf(stderr, "ReadUntil fail: %s. All Hell Broke Loose!\n", strerror(errno));
+    }
+    return r;
+  }else{
+    return false;
   }
-  return r;
 }
 
 //gets a packet, storing in given FLV_Pack pointer.