来自C socket()
/ recv()
背景,Java DatagramSocket.receive API似乎有点奇怪。为什么强制程序员为传入数据分配足够大的DatagramPacket
?
答案 0 :(得分:4)
这个问题是基于错误的前提。在C中,recv
系统调用的签名是:
ssize_t recv(int s, void *buf, size_t len, int flags);
请注意,您将指针传递给缓冲区以及该缓冲区的长度。手册输入然后说:
如果消息太长而无法容纳在提供的缓冲区中,则可能会丢弃多余的字节,具体取决于接收消息的套接字类型。
换句话说,C API期望调用者分配一个“足够大”的缓冲区,并且可能截断更长的消息......就像Java一样。