【 getsockopt/setsockopt系统调用】   
    
功能描述: 
获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。

用法: 
int setsockopt(
  __in          SOCKET        s,
  __in          int                level,
  __in          int                optname,
  __in          const char* optval,
  __in          int               optlen
);

int getsockopt(
  __in          SOCKET   s,
  __in          int           level,
  __in          int           optname,
  __out        char*     optval,
  __in_out    int*       optlen
);

参数:   
sock:将要被设置或者获取选项的套接字。
level:选项所在的协议层。
optname:需要访问的选项名。

optval:对于getsockopt(),指向返回选项值的缓冲。

对于setsockopt(),指向包含新选项值的缓冲。

optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。

对于setsockopt(),The size, in bytes, of the optval buffer.

level指定控制套接字的层次.可以取三种值: 
     1)SOL_SOCKET:通用套接字选项. 
     2)IPPROTO_IP:IP选项. 
     3)IPPROTO_TCP:TCP选项. 

optname指定控制的方式(选项的名称),我们下面详细解释 

optval获得或者是设置套接字选项.根据选项名称的数据类型进行转换 

选项名称        说明                  数据类型 
======================================================================== 
            SOL_SOCKET 
------------------------------------------------------------------------ 
SO_BROADCAST     允许发送广播数据            int 
SO_DEBUG          允许调试                int 
SO_DONTROUTE     不查找路由               int 
SO_ERROR        获得套接字错误             int 
SO_KEEPALIVE        保持连接                int 
SO_LINGER         延迟关闭连接              struct linger 
SO_OOBINLINE      带外数据放入正常数据流         int 
SO_RCVBUF         接收缓冲区大小             int 
SO_SNDBUF        发送缓冲区大小             int 
SO_RCVLOWAT       接收缓冲区下限             int 
SO_SNDLOWAT       发送缓冲区下限             int 
SO_RCVTIMEO       接收超时                struct timeval 
SO_SNDTIMEO       发送超时                struct timeval 
SO_REUSERADDR      允许重用本地地址和端口         int 
SO_TYPE              获得套接字类型             int 
SO_BSDCOMPAT      与BSD系统兼容              int 
========================================================================
            IPPROTO_IP 
------------------------------------------------------------------------
IP_HDRINCL       在数据包中包含IP首部          int 
IP_OPTINOS       IP首部选项               int 
IP_TOS           服务类型 
IP_TTL            生存时间                int 
========================================================================
            IPPRO_TCP 
------------------------------------------------------------------------
TCP_MAXSEG       TCP最大数据段的大小           int 
TCP_NODELAY       不使用Nagle算法             int 
========================================================================

返回说明:   
成功执行时,返回0。失败返回-1,errno被设为以下的某个值   
EBADF:sock不是有效的文件描述词
EFAULT:optval指向的内存并非有效的进程空间
EINVAL:在调用setsockopt()时,optlen无效
ENOPROTOOPT:指定的协议层不能识别选项
ENOTSOCK:sock描述的不是套接字

SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。

// 接收缓冲区
int nRecvBuf=32*1024;         //设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));

//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

注意:

当设置TCP套接口接收缓冲区的大小时,函数调用顺序是很重要的,因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客户,SO_RCVBUF选项必须在connect之前设置;对于服务器,SO_RCVBUF选项必须在listen前设置。

getsockopt/setsockopt 函数说明的更多相关文章

  1. Linux下getsockopt/setsockopt 函数说明

    [ getsockopt/setsockopt系统调用 功能描述:  获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和 ...

  2. getsockopt和setsockopt函数

    在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项. getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optv ...

  3. setsockopt函数功能及参数详解

    Socket描述符选项[SOL_SOCKET] #include <sys/socket.h> int setsockopt( int socket, int level, int opt ...

  4. setsockopt函数

    #include <sys/socket.h>     int setsockopt( int socket, int level, int option_name,            ...

  5. LINUX下getsockopt和setsockopt函数

    这两个函数仅用于套接字. 函数原型: #include <sys/socket.h> #include <sys/types.h> int getsockopt(int soc ...

  6. setsockopt()函数功能介绍

    功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时, 选项位于的层和选项的名称必须给出.为了操作套接字层的选项,应该 将层的 ...

  7. setsockopt()函数使用

    closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket BOOL bReuseaddr=TRUE; setsockopt (s,SOL_SOCKET ,SO ...

  8. linux下setsockopt函数的使用

    1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO ...

  9. setsockopt()和getsockopt()函数参数

    setsockopt()函数功能介绍 功能描述: 获取或者设置与某个套接字关联的选项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和选项的名称必须给出.为 ...

随机推荐

  1. PDF、WORD、PPT、TXT转换方法

  2. orale--varchar2(5) vs varchar2(5 byte) vs varchar2(5 char)

    varchar2(5) == varchar2(5 byte)------> 'abcde' 但是中文不是5 个字符 varchar2(5 char)----> 'abcde'

  3. 如何在Ubuntu下搭建Android NDK开发环境

    1 搭建Android SDK开发环境 参考在在Ubuntu下搭建Android SDK开发环境(图文)首先在Ubuntu下搭建Android SDK开发环境. 2 下载NDK开发包 打开官网: ht ...

  4. POJ 1220 NUMBER BASE CONVERSION(较复杂的进制转换)

    题目链接 题意 : 给你一个a进制的数串s,让你转化成b进制的输出. A = 10, B = 11, ..., Z = 35, a = 36, b = 37, ..., z = 61,0到9还是原来的 ...

  5. iphone6S“玫瑰金”的秘密——阳极氧化

    阳极氧化对多数人来说是一个熟悉又陌生的名词,大多数可能知道它的作用之一就是是能使金属呈现各种各样色彩.最为人熟知的运用阳极氧化技术的产品就是iphone系列产品了,已经推出了金色,玫瑰金色,深空灰色, ...

  6. Java读写Windows共享文件夹 .

    版权声明:本文为博主原创文章,未经博主允许不得转载. 项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片.文件等.那么如何使用Java读写Windows共享文件夹呢? Java可以使用JCIF ...

  7. 关于hadoop的环境变量

    export PATH export JAVA_HOME=/opt/jdk1.7 export PATH=$PATH:$JAVA_HOME/bin 为什么/etc/profile 添加了环境变量had ...

  8. JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门

    2 JSP内置标签(美化+业务逻辑)   1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容   2)JSP内 ...

  9. linux根目录下的文件夹

    http://wenku.baidu.com/link?url=PDpw0nuLm71kihyYWdGY2niJhQEsJXfu8NVbjy9RxLa-Zur3aoG4NkCFpD-GQKM_sQWN ...

  10. Servlet个人总结

    netstat -an ——查看端口占用情况 netstat -an ——查看是谁占用了哪个端口 端口被占用之后可以关闭端口占用程序或者在conf/server.xml修改本身使用端口 javac - ...