从插座读取

我需要使用从C读取的函数从AF_UNIX套接字读取到缓冲区,但我不知道缓冲区大小.

我认为最好的方法是读取N个字节,直到读取返回0(套接字中不再有写入器).它是否正确?有没有办法猜测套接字上写入的缓冲区的大小?

我以为socket是一个特殊的文件.以二进制模式打开文件并获取大小将有助于我知道给缓冲区的正确大小?

我是C的新手,所以请记住这一点.

最佳答案
常见的方法是使用ioctl(..)查询套接字的FIONREAD,它将返回可用的数据量.

int len = 0;
ioctl(sock, FIONREAD, &len);
if (len > 0) {
  len = read(sock, buffer, len);
}

转载注明原文:从插座读取 - 代码日志