gpt4 book ai didi

C UDP套接字,在recvfrom检索之前数据包存储在哪里?

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:33 24 4
gpt4 key购买 nike

我正在使用 UDP 套接字在 C 中创建一个小应用程序,我正在使用以下 recvfrom 函数:

int recvfrom(int s, void *buf, int len, unsigned int flags struct sockaddr *from, socklen_t *fromlen); 

我实际上想知道这个函数从哪里检索数据,因为在我的应用程序中,我收到不同的数据包,一旦我确定我收到了所有数据包,我就使用循环来检索多个数据包。

它似乎有效(也许我很幸运;)但我真的不明白我的数据包在循环中多次调用 recvfrom 之前存储在哪里。

提前感谢您的帮助,祝您有美好的一天!亚历克斯

最佳答案

它们保存在内核中的某个内部缓冲区中。如果该缓冲区已满(即,如果您的应用程序停止调用 recvfrom),内核将开始丢弃数据报。

重要的是要认识到 sendtorecvfrom 只是花哨的 memcpy 调用——它们实际上都不是“发送”或“收到”任何东西。 Sendto 将数据复制到内核,然后内核尝试将其实际放入数据包等。类似地,当您调用 recvfrom 时,数据已经收到并且 recvfrom 只是将其复制到您的用户空间缓冲区

关于C UDP套接字,在recvfrom检索之前数据包存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com