Большинство функций получения дейтаграмм, таких как cv recv или read, javas DatagramPacket class или pythons SocketServer, включают возможность узнать количество полученных данных.
c:
int amount = recv(sock, buf, n, MSG_WAITALL);
Java:
int amount = datagramSocket.getLength();
Python:
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
amount = len (self.request[0])
Являются ли они надежными?Или возможно, что принимаются только части сообщения, например, из-за фрагментации пакета или задержки в сети?
Другими словами: когда я отправляю порцию данных переменной длины через udp и получаю ее на другом конце,эти значения суммы точно равны размеру исходного чанка?
Редактировать:
Ниндзяль сделал хорошую точку, и я хочу включить ее здесь.Что происходит, когда функция приема прерывается, например, сигналом?Что происходит, когда два потока одновременно пытаются получить из одного сокета?