c - 'SO_USELOOPBACK' 未在此范围内声明
问题描述
我正在检查套接字选项,编译时出现此错误。我试图用谷歌搜索它,看起来以前没有人遇到过这个问题。
#include <netinet/tcp.h>
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
static char *sock_str_flag(union val *, int);
struct sock_opts {
const char *opt_str;
int opt_level;
int opt_name;
char *(*opt_val_str)(union val *, int);
}sock_opts[] = {
{ "SO_USELOOPBACK", SOL_SOCKET, SO_USELOOPBACK, sock_str_flag } //this is the error
};
解决方案
socket 选项SO_USELOOPBACK
不是 POSIX 标准。手册页setsockopt()
详细描述了的性质SO_USELOOPBACK
。
- 这
SO_USELOOPBACK
是一个[数字]标准。以 [Digital] 文档功能开头的文本段落包含在 DIGITAL UNIX 软件中,但当前未由适用于所描述界面的任何标准指定。当跨多个 UNIX 平台的源代码可移植性不如这些功能提供的功能重要时,请使用这些功能。
为了便携性,您需要进行ifdef
检查。
struct sock_opts {
const char *opt_str;
int opt_level;
int opt_name;
char *(*opt_val_str)(union val *, int);
}sock_opts[] = {
/* .... */
#ifdef SO_USELOOPBACK
{"SO_USELOOPBACK", SOL_SOCKET, SO_USELOOPBACK, sock_str_flag }
#endif
/* .... */
};
推荐阅读
- python - Python处理结果集
- flutter - 如何在flutter中共享一张卡片?
- sql - PostgreSQL 外部数据包装器模仿约束
- ios - 为 iOS 构建,但在为 tvOS 构建的目标文件中链接
- codenameone - 如何在其他文本下方以一种颜色显示文本(以模拟 LCD 段显示)?
- flutter - 在 Flutter 中使用 Agora 创建多个频道
- c# - 使用 linq 在关系表中选择最大值
- javascript - 调试时搜索chrome源代码卡住
- parallel-processing - 如何在 Ray 中与多角色共享内存
- php - 在 laravel 中调用模型