Java: почему метод DatagramSocket `receive` усекает сообщения? - PullRequest
1 голос
/ 07 февраля 2011

Исходя из фона C socket() / recv(), API Java DatagramSocket.receive кажется немного странным.Почему вынуждает программиста выделять DatagramPacket достаточно большой для входящих данных?

1 Ответ

4 голосов
/ 07 февраля 2011

Этот вопрос основан на ложной предпосылке.В C подпись для системного вызова recv:

ssize_t recv(int s, void *buf, size_t len, int flags);

Обратите внимание, что вы передаете указатель на буфер и длину этого буфера.Затем в ручном вводе говорится:

Если сообщение слишком длинное, чтобы поместиться в предоставленный буфер, лишние байты могут быть отброшены в зависимости от типа сокета, из которого получено сообщение.

Другими словами, API C ожидает, что вызывающая сторона выделит «достаточно большой» буфер, и может обрезать сообщения, которые длиннее ... как в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...