Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Receiving a part of packet via recvfrom (UDP)

I'm trying to receive a part of a packet via recvfrom. It actually works like this:

recvfrom(sockfd, serialised_meta, 12, flags, src_addr, addrlen);
recvfrom(sockfd, serialised_buf, BUFLEN, flags, src_addr, addrlen);

The data is sent like this:

 bufd->Serialise(serialised_buf, BUFLEN+12);
 sendto(sockfd, serialised_buf, BUFLEN+12, flags, dest_addr, addrlen);

So the idea is to read some meta data first and then decide whether to receive something else. The problem is that I receive 4 '/0' bytes in the beginning if second buffer (serialised_buf). It doesn't seem to be serialisation issue, I used my serialisation before, and everything was cool, while I was receiving the whole packet (meta and data) at once. Any ideas on how it could be fixed?

PS. I understand I can just skip unnecessary bytes) But anyway, why it might be happening?

like image 984
Roman Avatar asked Nov 09 '12 23:11

Roman


1 Answers

UDP isn't a "stream" protocol... once you do the initial recvfrom, the remainder of the packet is discarded. The second recvfrom is awaiting the next packet...

like image 62
mark Avatar answered Sep 28 '22 03:09

mark