【发布时间】:2020-10-07 12:16:13
【问题描述】:
当我用
监听 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 吗?那定义在哪里?
如果套接字中的字节数比这个数字多,会发生什么?他们会辍学吗?或者我会在下一个循环中阅读它们?
【问题讨论】:
-
什么样的socket? UNIX、UDP、TCP?
-
当然
len仅限于SIZE_MAX,所以最大值不会高于这个。 -
SIZE_MAX 在 32 位系统中是 65336?那是我可以从套接字读取的最大缓冲区 len 吗?如果超过此限制的数据会发生什么?
标签: c linux sockets buffer recvfrom