瀏覽代碼

netbios: recv in loop

Thomas Guillem 9 年之前
父節點
當前提交
55652745e0
共有 1 個文件被更改,包括 12 次插入11 次删除
  1. 12 11
      src/netbios_session.c

+ 12 - 11
src/netbios_session.c

@@ -231,17 +231,17 @@ static ssize_t    netbios_session_get_next_packet(netbios_session *s)
 
     // Only get packet header and analyze it to get only needed number of bytes
     // needed for the packet. This will prevent losing a part of next packet
-    res = recv(s->socket, (void *)(s->packet), sizeof(netbios_session_packet), 0);
-    if (res <= 0)
-    {
-        BDSM_perror("netbios_session_packet_recv: ");
-        return -1;
-    }
-    else if ((size_t)res != sizeof(netbios_session_packet))
+    total = sizeof(netbios_session_packet);
+    sofar = 0;
+    while (sofar < total)
     {
-        BDSM_dbg("netbios_session_packet_recv: incorrect size for received packet: %ld bytes",
-                 res);
-        return -1;
+        res = recv(s->socket, (void *)(s->packet) + sofar, total - sofar, 0);
+        if (res <= 0)
+        {
+            BDSM_perror("netbios_session_packet_recv: ");
+            return -1;
+        }
+        sofar += res;
     }
 
     total  = ntohs(s->packet->length);
@@ -256,7 +256,8 @@ static ssize_t    netbios_session_get_next_packet(netbios_session *s)
 
     while (sofar < total)
     {
-        res = recv(s->socket, (void *)(s->packet) + 4 + sofar, total - sofar, 0);
+        res = recv(s->socket, (void *)(s->packet) + sizeof(netbios_session_packet)
+                   + sofar, total - sofar, 0);
         //BDSM_dbg("Total = %ld, sofar = %ld, res = %ld\n", total, sofar, res);
 
         if (res <= 0)