getsockopt的使用案例
2016-08-09 09:18
106 查看
#include <iostream>
#include <string.h>
#include <vector>
#include <winsock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
union tagval
{
int nVal;
BOOL bVal;
DWORD dwVal;
linger lingerVal;
}val;
static char *sock_str_flag(union tagval* p,int)
{
if(p->bVal!=FALSE)
{
printf("on\n");
}
else
{
printf("off\n");
}
return NULL;
}
static char *sock_str_linger(union tagval* p,int)
{
printf("l_onoff:%d l_linger:%d\n",p->lingerVal.l_onoff,p->lingerVal.l_linger);
return NULL;
}
static char *sock_str_timeval(union tagval*,int)
{
return NULL;
}
static char *sock_str_int(union tagval* p,int)
{
printf("%d\n",p->nVal);
return NULL;
}
struct tagsock_opts
{
const char *opt_str;
int opt_level;
int opt_name;
char *
(*opt_val_str)(union tagval*,int);
}sock_opts[]={
{"SO_RCVBUF",SOL_SOCKET,SO_RCVBUF,sock_str_int},
{"SO_BROADCAST",SOL_SOCKET,SO_BROADCAST,sock_str_flag},
{"SO_LINGER",SOL_SOCKET,SO_LINGER,sock_str_linger},
{NULL,0,0,NULL}
};
int main(void)
{
WSADATA wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);
SOCKET s;
int len;
struct tagsock_opts *ptr;
for(ptr=sock_opts;ptr->opt_str!=NULL;ptr++)
{
switch(ptr->opt_level)
{
case SOL_SOCKET:
s=socket(AF_INET,SOCK_STREAM,0 );
break;
default:
break;
}
if(getsockopt(s,ptr->opt_level,ptr->opt_name,(char*)&val,&len)!=SOCKET_ERROR )
{
printf("%s ",ptr->opt_str);
ptr->opt_val_str(&val,len);
}
else
{
int err=WSAGetLastError();
printf("error:%d\n",err);
}
}
}
#include <string.h>
#include <vector>
#include <winsock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
union tagval
{
int nVal;
BOOL bVal;
DWORD dwVal;
linger lingerVal;
}val;
static char *sock_str_flag(union tagval* p,int)
{
if(p->bVal!=FALSE)
{
printf("on\n");
}
else
{
printf("off\n");
}
return NULL;
}
static char *sock_str_linger(union tagval* p,int)
{
printf("l_onoff:%d l_linger:%d\n",p->lingerVal.l_onoff,p->lingerVal.l_linger);
return NULL;
}
static char *sock_str_timeval(union tagval*,int)
{
return NULL;
}
static char *sock_str_int(union tagval* p,int)
{
printf("%d\n",p->nVal);
return NULL;
}
struct tagsock_opts
{
const char *opt_str;
int opt_level;
int opt_name;
char *
(*opt_val_str)(union tagval*,int);
}sock_opts[]={
{"SO_RCVBUF",SOL_SOCKET,SO_RCVBUF,sock_str_int},
{"SO_BROADCAST",SOL_SOCKET,SO_BROADCAST,sock_str_flag},
{"SO_LINGER",SOL_SOCKET,SO_LINGER,sock_str_linger},
{NULL,0,0,NULL}
};
int main(void)
{
WSADATA wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);
SOCKET s;
int len;
struct tagsock_opts *ptr;
for(ptr=sock_opts;ptr->opt_str!=NULL;ptr++)
{
switch(ptr->opt_level)
{
case SOL_SOCKET:
s=socket(AF_INET,SOCK_STREAM,0 );
break;
default:
break;
}
if(getsockopt(s,ptr->opt_level,ptr->opt_name,(char*)&val,&len)!=SOCKET_ERROR )
{
printf("%s ",ptr->opt_str);
ptr->opt_val_str(&val,len);
}
else
{
int err=WSAGetLastError();
printf("error:%d\n",err);
}
}
}
相关文章推荐
- .NET如何使用内存---餐馆案例分析[转载]
- C#中使用XML——基于DOM的案例分析
- eclipse Job 使用案例
- 14.4 使用EXPDP 和 IMPDP 搬移表空间 案例
- druby标准库的使用案例
- 一个非常精彩的jtune使用案例
- 有关使用和部署 Java 持久性体系结构 (JPA) 的案例研究
- 一个使用柱状图的案例[转]
- 14.4 使用EXPDP 和 IMPDP 搬移表空间 案例
- WiKi 在各領域的使用狀況跟案例介紹
- 《被误解的C++——学习和使用》的案例
- 使用SQLRootKit网页数据库后门控制案例
- Reflector 是自我保护和使用案例
- DataOutputStream和DataInputStream使用的案例
- cvs的使用最简单案例
- .NET如何使用内存---餐馆案例分析
- Webwork标签之Iterator使用案例
- samba案例使用小记
- C#将对象数组转换成DataSet使用案例
- getsockopt()/setsockopt()函数的使用