套接口属性设置和获取实例
2011-09-04 01:02
363 查看
/******************************************
程序名称:socketopt.cpp
程序功能:该程序演示了getsockopt()函数和setsockopt()函数用法
changshoumeng */
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
WSADATA wsaData;
SOCKET s;
int optname;//存放选项的值
int optlen;//选项的长度
if(WSAStartup(MAKEWORD(2,2),&wsaData) !=0)
{
printf("Failed to load winsock. \n");
return;
}
s = socket(AF_INET,SOCK_STREAM,0);//创建一个套接口
if(s == INVALID_SOCKET)
{
printf("socket() Error \n");
return;
}
optlen = sizeof(optname);
printf("---------------------------\n");
//获得套接口类型
if(getsockopt(s,SOL_SOCKET,SO_TYPE,(char *)&optname,&optlen) ==SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("以下信息是由getsockopt()函数取得的SO_SOCKET 级别选项实例\n");
switch(optname)
{
case SOCK_STREAM: printf("SO_TYPE:SOCK_STREAM \n");break;
case SOCK_DGRAM : printf("SO_TYPE:SOCK_DGRAM \n");break;
case SOCK_RAW : printf("SO_TYPE:SOCK_RAW \n");break;
}
//获取接收缓冲区的大小
if(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&optname,&optlen) ==SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("SO_RCVBUF:%d \n",optname);
//获取发送缓冲区的大小
if(getsockopt(s,SOL_SOCKET,SO_SNDBUF,(char *)&optname,&optlen) ==SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("SO_SNDBUF:%d \n",optname);
optname = 16*1024;
//重新设置缓冲区的大小
if(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&optname,sizeof(optname) )== SOCKET_ERROR)
{
printf("setsockopt() Error: %u \n",WSAGetLastError());
return;
}
//获取重新设置的接收缓冲区的大小
if(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&optname,&optlen) == SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("---------------------\n");
printf("使用setsockopt()函数设置后再取得的SO_RCVBUF数值\n");
printf("SO_RCVBUF:%d \n",optname);
printf("---------------------\n");
WSACleanup();
}
转自 http://www.cppblog.com/changshoumeng/archive/2010/05/08/114830.html
程序名称:socketopt.cpp
程序功能:该程序演示了getsockopt()函数和setsockopt()函数用法
changshoumeng */
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
WSADATA wsaData;
SOCKET s;
int optname;//存放选项的值
int optlen;//选项的长度
if(WSAStartup(MAKEWORD(2,2),&wsaData) !=0)
{
printf("Failed to load winsock. \n");
return;
}
s = socket(AF_INET,SOCK_STREAM,0);//创建一个套接口
if(s == INVALID_SOCKET)
{
printf("socket() Error \n");
return;
}
optlen = sizeof(optname);
printf("---------------------------\n");
//获得套接口类型
if(getsockopt(s,SOL_SOCKET,SO_TYPE,(char *)&optname,&optlen) ==SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("以下信息是由getsockopt()函数取得的SO_SOCKET 级别选项实例\n");
switch(optname)
{
case SOCK_STREAM: printf("SO_TYPE:SOCK_STREAM \n");break;
case SOCK_DGRAM : printf("SO_TYPE:SOCK_DGRAM \n");break;
case SOCK_RAW : printf("SO_TYPE:SOCK_RAW \n");break;
}
//获取接收缓冲区的大小
if(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&optname,&optlen) ==SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("SO_RCVBUF:%d \n",optname);
//获取发送缓冲区的大小
if(getsockopt(s,SOL_SOCKET,SO_SNDBUF,(char *)&optname,&optlen) ==SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("SO_SNDBUF:%d \n",optname);
optname = 16*1024;
//重新设置缓冲区的大小
if(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&optname,sizeof(optname) )== SOCKET_ERROR)
{
printf("setsockopt() Error: %u \n",WSAGetLastError());
return;
}
//获取重新设置的接收缓冲区的大小
if(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&optname,&optlen) == SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("---------------------\n");
printf("使用setsockopt()函数设置后再取得的SO_RCVBUF数值\n");
printf("SO_RCVBUF:%d \n",optname);
printf("---------------------\n");
WSACleanup();
}
转自 http://www.cppblog.com/changshoumeng/archive/2010/05/08/114830.html
相关文章推荐
- jQuery元素属性操作实例(设置、获取及删除元素属性)
- Android-NDK开发之基础--Android JNI实例代码(二)-- 获取/设置类的域或者说属性字段
- C#反射实例——获取及设置对象属性,运行对象方法
- Python中父类和子类间类属性(非实例属性)的设置获取的传递
- Android-NDK开发之基础--Android JNI实例代码(二)-- 获取/设置类的域或者说属性字段
- Pyhton类、实例属性的获取和设置
- C#反射新建类实例和调用类方法及属性帮助类 以及获取或设置对象属性中字段值帮助类
- Android-NDK开发之基础--Android JNI实例代码(二)-- 获取/设置类的域或者说属性字段
- Android 反射机制获取或设置系统属性(SystemProperties)
- JBPM4.4:执行流程实例(启动、向后一步、查询任务、拾取任务、完成任务、设置获取流程变量)
- strut2的进阶配置和属性参数设置获取问题
- 操作excel获取范围,设置属性
- 用js/JQuery获取/设置元素属性
- 今天用到的各种控件的属性设置,以及在Activity中的获取方法和设置
- 2.通过原始的Driver接口通过读取Properties属性文件获取JDBC数据库连接Connection
- H5中关于自定义属性的设置和获取
- Cookie的属性(cookie的设置、获取和删除)
- activity启动流程实例+设置流程变量+获取流程变量+向后执行一步
- Mootools 1.2教程 设置和获取样式表属性
- 动态根据实体类的属性获取和设置属性值