sock getsockopt()和setsockopt()

来源:互联网 发布:知乎live破解 编辑:程序博客网 时间:2024/05/16 01:22

原型:int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);

        int setsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);

参数

sockfd一个标识套接口的描述字。

level选项定义的层次。支持的层次仅有SOL_SOCKETIPPROTO_TCP

optname需获取的套接口选项。

optval指向存放所获得选项值的缓冲区。

optlen指向optval缓冲区的长度值。

返回值:

成功返回0,失败返回SOCKET_ERROR

Optname

SOL_SOCKET    SO_REUSEADDR
SOL_SOCKET    SO_KKEPALIVE
SOL_SOCKET    SO_LINGER
SOL_SOCKET    SO_BROADCAST
SOL_SOCKET    SO_OOBINLINE
SOL_SOCKET    SO_SNDBUF
SOL_SOCKET    SO_RCVBUF
SOL_SOCKET    SO_TYPE
SOL_SOCKET    SO_ERROR
SOL_TCP        SO_NODELAY

例子:

#include <errno.h>
#include <error.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include "prin.h"

int main()
{
    int ret=-1,s=-1;            
    int sndbuf=0,rcvbuf=0;        
    socklen_t optlen;        


   
    s = socket(PF_INET,SOCK_STREAM,0);
    if(s==-1)
  prin_info("creat error:%s",strerror(errno));


   
    sndbuf = 5000;    
    ret = setsockopt(s,SOL_SOCKET,SO_SNDBUF,&sndbuf,sizeof sndbuf);
    if(ret)
    prin_info("setsockopt error:%s",strerror(errno));


   
    rcvbuf = 8192;    
    ret = setsockopt(s,SOL_SOCKET,SO_RCVBUF,&rcvbuf,sizeof rcvbuf);
    if(ret)
    prin_info("setsockopt error:%s",strerror(errno));


   
    optlen = sizeof(sndbuf);
    ret = getsockopt(s,SOL_SOCKET,SO_SNDBUF,&sndbuf,&optlen);
    if(ret)
 prin_info("getsockopt error:%s",strerror(errno));


prin_info("sndbuf=%d",sndbuf);
   
    optlen = sizeof(rcvbuf);
    ret = getsockopt(s,SOL_SOCKET,SO_RCVBUF,&rcvbuf,&optlen);
    if(ret)
 prin_info("getsockopt error:%s",strerror(errno));

prin_info("revbuf=%d",rcvbuf);
    close(s);
    return 0;
}
输出结果:

[main][39]sndbuf=10000
[main][46]revbuf=16384

sndbuf: 最小值是2k,最大值是224K ;默认16k(fedora下面的值,不同平台有可能不一样);在inluce/net/sock.h里面有定义,小于最小值就使用最小值,最大值也一样。其他的用设置值的2倍

#define SOCK_MIN_SNDBUF 2048
#define SOCK_MIN_RCVBUF 256

rcvbuf:最小值是256,最大值是224k;默认87380。如果设置buf=200*1024;buf=224*1024

0 0
原创粉丝点击