UDP消息大小差异

时间:2014-07-19 06:46:40

标签: udp sendto recvfrom

假设A向B发送大小为N的UDP消息,如

sockaddr_in to;
to.sin_family=AF_INET;
to.sin_port=htons(port);
to.sin_addr.s_addr=inet_addr(address);
sendto(sock,(const char*)buffer,N,0,(sockaddr*)&to,sizeof(to));

现在B收到此消息,期望它的大小为N_1

sockaddr from;
socklen_t length_from=sizeof(from);
recvfrom(sock,(char*)buffer,N_1,0,&from,&length_from);

当N_1!= N?

时会发生什么

1 个答案:

答案 0 :(得分:1)

  

当N_1!= N?

时会发生什么

如果接收缓冲区大于传入数据报,则整个数据报将传输到缓冲区,并返回实际长度作为recfvrom()的返回值。你现在忽略了它。不要那样做。

如果接收缓冲区小于传入数据报,则会将其截断以适合接收缓冲区,并且超出该数据报的数据将被丢弃。返回传输到缓冲区的实际数据长度。