取得套接字选项
来源:互联网 发布:怎么用iwatch解锁mac 编辑:程序博客网 时间:2024/05/17 23:57
getsopts.c
/*============================================================================ Name : getsopts.c Author : Haier Version : 1.01 Copyright : Copyright (c) 2014 Description : getsopts in C, Compile by Gcc ============================================================================*/ #include <netinet/tcp.h>#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <unistd.h>#include <netinet/in.h>typedef union optval{intval;struct lingerlinger;struct timevaltv;unsigned char str[16];}val;typedef enum valtype{VALINT,VALLINGER,VALTIMEVAL,VALUCHAR,VALMAX}valtype;typedef struct sopts{int level;int optname;char *name;valtype valtype;}sopts;static val optval;sopts sockopts[] = {{SOL_SOCKET, SO_BROADCAST, "SO_BROADCAST", VALINT},{SOL_SOCKET, SO_DEBUG, "SO_DEBUG", VALINT},{SOL_SOCKET, SO_DONTROUTE, "SO_DONTROUTE", VALINT},{SOL_SOCKET, SO_ERROR, "SO_ERROR", VALINT},{SOL_SOCKET, SO_KEEPALIVE, "SO_KEEPALIVE", VALINT},{SOL_SOCKET, SO_LINGER, "SO_LINGER", VALINT},{SOL_SOCKET, SO_OOBINLINE, "SO_OOBINLINE", VALINT},{SOL_SOCKET, SO_RCVBUF, "SO_RCVBUF", VALINT},{SOL_SOCKET, SO_RCVLOWAT, "SO_RCVLOWAT", VALINT},{SOL_SOCKET, SO_RCVTIMEO, "SO_RCVTIMEO", VALTIMEVAL},{SOL_SOCKET, SO_SNDTIMEO, "SO_SNDTIMEO", VALTIMEVAL},{SOL_SOCKET, SO_TYPE, "SO_TYPE", VALINT},{IPPROTO_IP, IP_HDRINCL , "IP_HDRINCL", VALINT},{IPPROTO_IP, IP_OPTIONS, "IP_OPTIONS", VALINT},{IPPROTO_IP, IP_TOS, "IP_TOS", VALINT},{IPPROTO_IP, IP_TTL, "IP_TTL", VALINT},{IPPROTO_IP, IP_MULTICAST_TTL, "IP_MULTICAST_TTL", VALUCHAR},{IPPROTO_IP, IP_MULTICAST_LOOP,"IP_MULTICAST_LOOP",VALUCHAR},{IPPROTO_TCP,TCP_KEEPCNT, "TCP_KEEPCNT", VALINT},{IPPROTO_TCP,TCP_MAXSEG, "TCP_MAXSEG", VALINT},{IPPROTO_TCP,TCP_NODELAY, "TCP_NODELAY", VALINT},{0, 0, NULL, VALMAX}};/*-------------------------------------------------------------------; 函数:display()---------------------------------------------------------------------*/static void display(sopts *sockopt, int len){switch(sockopt->valtype){case VALINT:{printf("optname %s: default is %d\n", sockopt->name, optval.val);break;}case VALLINGER:{printf("optname %s: default is %d\t%d to linger\n", sockopt->name, optval.linger.l_onoff, optval.linger.l_linger);break;}case VALTIMEVAL:{printf("optname %s: default is %.06f\n", sockopt->name, ((((double)optval.tv.tv_sec * 100000 + (double)optval.tv.tv_usec))/(double)1000000));break;}case VALUCHAR:{int i = 0;printf("optname %s: default is ", sockopt->name);for(i=0; i<len; i++){printf("%02x ", optval.str[i]);}printf("\n");break;}default:{break;}}}/*-------------------------------------------------------------------; 函数:main()---------------------------------------------------------------------*/int main(int argc, char *argv[]){int err = -1;socklen_t len = 0;int i = 0;int fd = socket(AF_INET, SOCK_STREAM, 0);while(sockopts[i++].valtype != VALMAX){len = sizeof(sopts);err = getsockopt(fd, sockopts->level, sockopts->optname, &optval, &len);if(err > -1){display(&sockopts[i], len);}}close(fd);return 0;}
运行示例:
[Lenovo@Linux Ping]$ ./sopts_get.o optname SO_BROADCAST: default is 0optname SO_DEBUG: default is 0optname SO_DONTROUTE: default is 0optname SO_ERROR: default is 0optname SO_KEEPALIVE: default is 0optname SO_LINGER: default is 0optname SO_OOBINLINE: default is 0optname SO_RCVBUF: default is 0optname SO_RCVLOWAT: default is 0optname SO_RCVTIMEO: default is 0.000000optname SO_SNDTIMEO: default is 0.000000optname SO_TYPE: default is 0optname IP_HDRINCL: default is 0optname IP_OPTIONS: default is 0optname IP_TOS: default is 0optname IP_TTL: default is 0optname IP_MULTICAST_TTL: default is 00 00 00 00 optname IP_MULTICAST_LOOP: default is 00 00 00 00 optname TCP_KEEPCNT: default is 0optname TCP_MAXSEG: default is 0optname TCP_NODELAY: default is 0
0 0
- 取得套接字选项
- 套接字选项
- 套接字选项
- 套接字选项setsockopt()
- 通用套接字选项
- 7 套接字选项
- 套接字选项介绍
- 套接字选项
- 套接字选项
- 套接字选项
- 套接字选项
- 套接字选项
- 套接字的选项
- 套接字选项
- 套接字选项
- [转]套接字选项
- SOCKET套接字选项
- Linux____套接字选项
- 将CString类型数据保存到txt文本文件中(Unicode下无乱码)
- mysql连接数据库的优化(一次连接多次使用)
- 为什么使用apache-httpclient而不是jdk-urlconnection
- Acdream 1213——Matrix Multiplication
- Python 抓取网页学习系列之一(网页编码格式)
- 取得套接字选项
- Servlet实现文件的下载
- Code::Blocks安装流程
- 我所读的书籍
- zoj 3229 有源汇上下界最大流
- HDU 1068 Girls and Boys 最大独立集 二分图匹配
- hdu 4223 Dynamic Programming? (dp)
- javascript 高级程序设计 第10章 Dom
- Java中的初始化顺序