|
@@ -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)
|