大多数数据报接收函数,如 c 的 recv 或 read、javas DatagramPacket 类或 pythons SocketServer,都包括找出接收数据量的可能性。
C:
int amount = recv(sock, buf, n, MSG_WAITALL);
爪哇:
int amount = datagramSocket.getLength();
Python:
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
amount = len (self.request[0])
这些可靠吗?或者是否有可能只收到部分消息,例如由于数据包碎片或网络延迟?
换句话说:当我通过 udp 发送一个可变长度的数据块并在另一端接收它时,这些数量值是否完全等于原始块的大小?
编辑:
ninjalj 提出了一个很好的观点,我想把它包括在这里。当接收函数被中断时会发生什么,例如被信号中断?当两个线程同时尝试从同一个套接字接收时会发生什么?