套接口属性设置和获取实例

/******************************************
程序名称: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值