#include <sys/socket.h>
#include <netinet/in.h>
union val {
//套接口选项可能有的5个类型分别作为一个成员:
int i_val;
long l_val;
char c_val[10];
struct linger linger_val;
struct timeval timeval_val;
//struct {int S; int uS}
} val;
//函数原型(prototype),这些函数用于输出套接口选项的值
static char *sock_str_flag(union val *, int); //静态函数,只可在本文件中被调用
static char *sock_str_int(union val *, int);
static char *sock_str_linger(union val *, int);
static char *sock_str_timeval(union val *, int);
//定义结构sock_opts, 其中包含了获得或输出套接口选项的所有信息
struct sock_opts {
char *opt_str; //字符名称
int opt_level; //级别
int opt_name; //名称
char *(*opt_val_str)(union val *, int); //函数指针,用于输出,
};
//定义结构数组并初始化
struct sock_opts sock_opts[] =
{
//全局变量数组才可以初始化
"SO_BROADCAST", SOL_SOCKET, SO_BROADCAST, s