gpt4 book ai didi

c - 接收/接收的最大镜头数是多少

转载 作者:行者123 更新时间:2023-12-03 11:59:05 31 4
gpt4 key购买 nike

当我用以下方法监听TCP或UDP套接字时
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
或者
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flag , struct sockaddr *src_addr, socklen_t *addrlen);
有称为len的参数

在linux中,使用这些功能可以读取的最大缓冲区len是多少?是65336吗?那在哪里定义?

如果套接字中的字节数多于该数字会发生什么?他们会辍学吗?还是我将在下一个循环中阅读它们?

最佳答案

由于len的类型为size_t,因此其最大大小由SIZE_MAX定义。
C标准指定SIZE_MAX必须至少为65535。
但是,没有上限,因此其实际值取决于编译器。
size_tSIZE_MAX<stdint.h>中定义。

如果字节数多于指定的len,将发生什么情况取决于您使用的套接字类型。

如果您有一个TCP套接字(类型为SOCK_STREAM),则等待读取的字节数超过了len的值,那么下次您调用recv()时将读取它们。

但是,如果您的套接字的类型为SOCK_DGRAM(UDP套接字),则对recvfrom()的调用将始终读取整个数据报。如果数据报的长度大于len,则第一个len字节将被读入缓冲区,其余字节将丢失。

在这种情况下,recvfrom()返回-1并将errno设置为EMSGSIZE,这就是您测试这种情况是否发生的方法。

关于c - 接收/接收的最大镜头数是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62433052/

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