How does recvfrom know when to stop reading packets?

647 Views Asked by At

in C recvfrom can be used to read UDP messages form a socket as such:

int length = recvfrom(socket, buffer, max_length, 0, NULL, 0);

max_length only tells the maximum number of bytes the buffer can hold, and not the actual length of course.

Assume my message is the following and is sent with sendto:

char *message = "hi";
sendto(sock, message, strlen(message), 0, NULL, 0);

Now recvfrom will immediately stop reading after the i character is received. length will be set to 2. How does it know when to stop?

does sendto append any data to the packet with result of strlen saying what the data length is? or does it look for null terminating char?

2

There are 2 best solutions below

3
dbush On BEST ANSWER

Unlike a TCP socket which is stream based, UDP sockets are datagram based.

That means that a single call to sendto will send one UDP datagram and a single call to recvfrom will receive a single UDP datagram. This also means that the buffer supplied to recvfrom should be large enough to hold a single datagram. If it is not large enough, any bytes from that datagram that don't fit in the buffer will be discarded.

2
John Schmidt On

recvfrom will also return at the first null received.

If hi/00/there is sent, the buffer will only contain hi