1

无论如何,我可以从传入的数据包中获取 sockaddr 信息,而无需先对数据进行实际的 recvfrom 操作吗?我只是想知道,因为您可以说有一些东西可以读取,例如民意调查或选择我想知道在实际读取发送的数据之前是否可以从中提取更多信息。我问这个是因为我有一个系统,其中每个单独的 ip/端口组合都有自己的小内部缓冲区,我们将分块消息放入其中,我需要知道以便将其放入正确的内部缓冲区中。

4

1 回答 1

1

是的,通过向recvfrom调用提供 MSG_PEEK 标志。

recvfrom(socket, buffer, 1, MSG_PEEK, &address, &address_len);

这将使数据报完好无损,而不是将其删除。您当然可以为缓冲区大小指定一个较小的值,以减少不必要的读取开销。下次你做一个正常recvfrom的数据报将被正常删除。

recvfrom(socket, buffer, length, 0, &address, &address_len); // Do the actual read
于 2013-04-18T22:37:42.070 回答