有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项。

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

level指定控制套接字的层次.可以取三种值:

  • SOL_SOCKET:通用套接字选项.
  • IPPROTO_IP:IP选项.
  • IPPROTO_TCP:TCP选项.

optname指定控制的方式(选项的名称)

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

返回值说明:

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

数据结构说明:

1)结构:linger,它的声明如下:

struct linger{int l_onoff;    //状态int l_linger;    //等待时间
};

2)结构:timeval,它的声明如下:

struct timeval{time_t    tv_sec;   //秒suseconds_t  tv_usec; //微秒:百万分之一秒
};

举例说明:

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前设置。

转载于:https://www.cnblogs.com/wangfengju/p/6172581.html

UNIX网络编程——套接字选项(SO_RCVBUF和SO_SNDBUF)相关推荐

  1. UNIX网络编程---套接字编程简介(三)

    UNIX网络编程---套接字编程简介 一.概述 从这里开始正式开始网络编程之旅,所有的函数都是基本的库函数.这些都是网络编程的基础.Come on!!!! 二.套接字地址结构 大多数套接字函数都需要一 ...

  2. C/C++Unix网络编程-套接字编程简介

    套接字地址结构 套接字的地址结构可以在两个方向上传播:从进程到内核和从内核到进程. IPV4套接字地址结构 sin_len是长度字段,有的平台上的套接字没有这个东西,因为有外置的sizeof运算符.不 ...

  3. 【网络编程套接字(一)】

    网络编程套接字(一) 理解源IP地址和目的IP地址 理解源MAC地址和目的MAC地址 理解源端口号和目的端口号 PORT VS PID 认识TCP协议和UDP协议 网络字节序 socket编程接口 s ...

  4. 网络编程套接字(四)

    网络编程套接字(四) 文章目录 网络编程套接字(四) 一.实现tcp服务器多用户版本(多进程.多线程.线程池版本) 一.实现tcp服务器多用户版本(多进程.多线程.线程池版本) tcp_process ...

  5. 网络编程套接字(三)

    网络编程套接字(三) 文章目录 网络编程套接字(三) 一.实现简单的Tcp服务器(单用户) 一.实现简单的Tcp服务器(单用户) tcp_socket.hpp #pragma once #includ ...

  6. 网络编程套接字(二)

    网络编程套接字(二) 文章目录 网络编程套接字(二) 一.简单的UDP网络程序 一.简单的UDP网络程序 封装udp_socket #pragma once #include <cstdio&g ...

  7. 网络编程套接字(一)

    网络编程套接字(一) 文章目录 网络编程套接字(一) 一.基础知识 二.sock编程接口 一.基础知识 1. 理解源IP地址和目的IP地址 在IP数据包头部中,有两个IP地址,分别叫源IP地址和目的I ...

  8. 详细讲解 —— 网络编程套接字(Java EE初阶)

    网络编程套接字 1 认识网络编程套接字 2 UDP 数据报套接字编程 2.1 UPD服务端 2.1 UDP客户端 2.3 结果测试 3 TCP流套接字编程 3.1 TCP服务端 3.2 TCP客户端 ...

  9. 【javaEE】网络编程套接字

    To u&me: 努力经营当下,直至未来明朗 文章目录 前言 一.网络编程(没时间可以跳过) 一)网络编程了解 二)相关基本概念 二.Socket套接字 三.数据报套接字通信(UDP) 写一个 ...

最新文章

  1. 从公司发展看技术人才需求
  2. 【留用】C#的一些好的书籍
  3. 为什么说嵌入式开发比单片机要难很多?工程师谈谈自己的感悟
  4. python求小于n的所有素数_用python求出2000000内所有素数的和?不知怎么写?
  5. [转载] java注释
  6. Castle ActiveRecord学习实践(2):构建配置信息
  7. 两种遮罩层的关闭方法
  8. php怎么阻止页面跳转,php如何控制页面跳转
  9. python根据关键词下载图片_python批量下载PPT图片,看完本代码你也会批量下载图片...
  10. ActiveMQ官方文档翻译-内嵌消息中间件
  11. MySQL数据库增删改查(基础操作命令详解)
  12. 计算机无法识别打印机usb,USB无法识别打印机的解决方案和教程
  13. 拳皇重生服务器维护,拳皇98终极之战OL格斗家重生系统玩法攻略
  14. OSChina 周二乱弹 ——女孩在身上纹了个四叶草
  15. 【论文笔记】DR-TANet: Dynamic Receptive Temporal Attention Network for Street Scene Change Detection
  16. android学习笔记之GoogleMap 【转】
  17. 如何在wince下添加和删除驱动(作者:wogoyixikexie@gliet)
  18. E22 LoRa模块透传 定点传输 WOR模式测试与MicroPython应用
  19. python游戏最简单代码-python基础练习之几个简单的游戏
  20. php 赠送礼品功能开发,类似礼物说送礼提醒的功能该怎么做?

热门文章

  1. C语言怎么输出百分号%
  2. android对象缓存,Android简单实现 缓存数据
  3. 两数的最大公约数算法基础及优化
  4. BestCoder Round #86 1002 HDU 5805 ——NanoApe Loves Sequence
  5. Linux C语言C++ makefile文件编写
  6. Linux下的I/O多路复用select,poll,epoll浅析
  7. Linux下使用socket传输文件的C语言简单实现
  8. 从0到1写RT-Thread内核——空闲线程与阻塞延时的实现
  9. 【数据结构】对快速排序原理的理解(图解,通俗易懂)
  10. 【Verilog】数据流建模传输问题:赋值传输有方向