检查所有套接字选项的main函数

代码如下:

int main(int argc, char **argv)

{

int fd;

socklen_t len;

struct sock_opts *ptr;

for (ptr = sock_opts, ptr->opt_str != NULL; ptr++)

{

printf("%s:", ptr->opt_str);

if (ptr->opt_val_str == NULL)

printf("(undefined)\n");

else

{

switch (ptr->opt_level)

{

case SOL_SOCKET:

case IPPROTO_IP:

case IPPROTO_TCP:

fd = Socket(AF_INET, SOCK_STREAM, 0);

break;

#ifdef IPV6

case IPPROTO_IPV6:

fd = Socket(AF_INET6, SOCK_STREAM, 0);

break;

#endif

#ifdef IPPROTO_SCTP

case IPPROTO_SCTP:

fd = Socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);

break;

#endif

default:

err_quit("Can‘t create fd for level %d\n", ptr->opt_level);

}

len = sizeof(val);

if (getsockopt(fd, ptr->opt_level, ptr->opt_name, &val, &len) == -1)

err_ret("getsockopt error");

else

printf("default=%s\n", (*ptr->opt_val_str)(&val, len));

close(fd);

}

}

exit(0);

}

sock_str_flag函数:将标志选项转换为字符串

static char strres[128];

static char*

sock_str_flag(union val *ptr,int len)

{

if(len!=sizeof(int))

snprintf(strres,sizeof(strres),"size (%d) not sizeof(int)",len);

else

snprintf(strres,sizeof(strres),"%s",(ptr->i_val==0)?"off":"on");

return (strres);

}

时间: 2024-11-09 19:51:41

检查所有套接字选项的main函数的相关文章

linux程序设计——套接字选项(第十五章)

现在可以改进客户程序,使它可以连接到任何有名字的主机,这次不是连接到示例服务器,而是连接到一个标准服务,这样就可以演示端口号的提取操作了. 大多数UNIX和一些linux系统都有一项标准服务daytime,它提供系统的日期和时间.客户可以连接到这个服务来查看服务器的当前日期和时间.下面就是完成这一工作的客户程序getdate.c 编写程序getdate.c /*********************************************************************

SO_REUSEADDR 套接字选项应用实例

网络上关于SO_REUSEADDR套接字选项用来解决地址重用问题的资料不少,但只停留在文字表达上,并没有实例,很容易误导初学者,并产生疑惑,此处不再赘述.下面通过一个简短的例子来展示如何在项目中合理的使用该选项,以及需要注意的问题. 关于TCP断开连接四次握手,如图所示 应用场景: 之前项目中遇到一个问题,聊天服务器的开启,关闭和重启,例如将服务器关闭后,实际上关闭了服务器的监听套接字(close),如果此时用户点击开启服务器,那么用户希望的情况是服务器又立即启动了.而由于close后,执行了主

第7章套接字选项

一般通过以下函数设置套接字选项:getsockopt和setsockopt函数;fcntl函数;ioctl函数 #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, i

Unix网络编程学习笔记之第7章 套接字选项

一.获取/设置套接字选项的方法 一个套接字描述符相关联的套接字选项很多.获取/设置套接字选项的方法: 1.  getsockopt和setsockopt函数 2. fcntl函数 3. ioctl函数 二. getsockopt和setsockopt函数 int getsockopt(int sockfd, int level, int optname, void* optval, socklen_t* optlen); int setsockopt(int sockfd, int level,

apue和unp的学习之旅09——套接字选项

//-----------------------------------1.getsockopt和setsockopt-------------------------------------- #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void* optval, socklen_t* optlen); int setsockopt(int sockfd, int level, int

sockets: 套接字选项相关的系统调用

########################################################### 套接字选项相关的系统调用: ########################################################### 将optval指向的单元中的值设置给optname选项: int setsockopt(int sockfd, int level, int optname, const void *optval,socklen_t optlen)

套接字选项

套接字选项,超高级货,赛车的按钮盘 getsockopt和setsockopt 原型:int getsockopt(int s,int level,int opname,void *optval,socklen_t *optlen); 原型:int setsockopt(int s,int level,int optname,const void *optval,socklen_t optlen); s为将要获取或设置的套接字描述符,可以通过socket函数获取 level为选项所在的协议层 o

UNIX网络编程——套接字选项

http://www.educity.cn/linux/1241288.html 有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项. int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen) int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)

socket套接字选项

socket.setsockopt(level, optname, value) ↑ ↑ ↑ →[SO_KEEPALIVE ,   ↑  SO_LINGER , ↑   SO_RCVBUF , ↑    SO_SNDBUF , ↑       SO_RCVLOWAT ,SO_SNDLOWAT , ↑    SO_RCVTIMEO , SO_SNDTIMEO, ↑  SO_REUSEADDR] 按照参数选项级别level值的不同   套接字选项分为3大类 1.通用套接字选项:SOL_SOCKET