Linux下的TCP/IP编程----socket的可选项

原创 2016年05月31日 16:25:15

在之前我们都是直接通过socket()函数创建一个socket文件描述符直接使用,其实这只是系统为我们提供的一个默认的socket描述符,我们可以根据自己的工程的需求来对socket进行相应的配置,以提高程序的效率。

以下就是一些常见的可选项参数:

协议层 选项名 读取 设置 作用
SOL_SOCKET SO_SENDBUF O O 设置输出缓冲的大小
SO_RCVBUF O O 设置输入缓冲去大小
SO_REUSEADDR O O 端口释放后立即重用
SO_KEEPALIVE O O 开启心跳检测
SO_BROADCAST O O 开启广播功能
SO_DONTROURT O O 发送给直连网络,和选用的协议有关
SO_OOBINLINE O O 直接发送单字节数据
SO_ERROR O X 调试和异常信息
SO_TYPR O X 套接字类型

协议层 选项名 读取 设置 作用
IPPROTO_IP IP_TOS O O 修改IP包的TOS字段.
IP_TTL O O 设置主机发送数据包的生存时间
IP_MULTICAST_TTL O O 设置多播组数据的TTL值
IP_MULTICAST_LOOP O O 设置多播是否回送
IP_MULTICAST_IF O O 设置默认接口

协议层 选项名 读取 设置 作用
IPPROTO_TCP TCP_KEEPALIVE O O 设置主动探测socket是否可用的方式
TCP_NODELAY O O 设置Nagle算法
TCP_MAXSEG O O 设置发送给对端的最大数据量

设置可选项的方法:

int getsockopt(int sock,int level,int optname,void *optval,socklen_t *optlen):获取socket当前的状态

  • sock(socket描述符):要查看的socket描述符

  • level(协议层):要查看的可选项的协议层

  • optname(可选项名字):要查看的可选项的名字

  • optval(缓冲地址):可选项值的缓冲地址

  • optlen(地址长度):保存返回的可选项值的字节数

成功时返回0,失败时返回-1

int setsockopt(int sock,int level,int optname,const void *optval,socklen_t *optlen):设置socket的状态

  • sock(socket描述符):要设置的socket描述符

  • level(协议层):要设置的可选项的协议层

  • optname(可选项名字):要设置的可选项的名字

  • optval(缓冲地址):要设置的可选项值的缓冲地址

  • optlen(地址长度):保存要设置的可选项值的字节数

成功时返回0,失败时返回-1

版权声明:本文为博主原创文章,转载请注明出处。

相关文章推荐

Linux下更改TCP window size, MSS, RTT

关于TCP window size, MSS, RTT具体的解释就不多说了,网上有很多的解释.但是最好的学习和复习的方法就是看TCP/IP第一卷协议,从17章开始。讲的很详细也讲了很多现象背后的原因。...

Linux 进程间通信 --- 信号通信 --- signal --- signal(SIGINT, my_func); --- 按键驱动异步通知

信号  ( signal ) 机制是 UNIX 系统中最为古老的进程间通信机制,很多条件可以产生一个信号. 信号的产生:           1,当用户按下某些按键时,产生信号.    ...

Windows环境下搭建基于Eclipse的STM32 GCC 开发环境(一)工具篇

这段时间玩了一段STM32F207和STM32F407,以前一直用IAR环境,但STM32的库函数太多,码代码实在是费劲,要是有类似VC助手那样的提示功能就好了。上网搜索了一堆资料,貌似Eclipse...

Linux下的TCP/IP编程------基于TCP的半关闭

在TCP服务端和客户端建立连接之后服务端和客户端会分别有两个独立的输入流和输出流,而且相互对应。服务端的输出流对应于客户端的输入流,服务端的输入流对应于客户端的输出流在Linux下的close()函数...

Linux下的TCP/IP编程----多播和广播的实现

在前边我们实现的都是服务端客户端这样点对点的通讯,数据只是从一个点到另一个点,但是当我们需要将一份数据同时发给指定的多个人时就遇到了问题,总不能建立多个TCP的长连接或者是多个UDP数据报吧。这时我们...

Linux下的TCP/IP编程----IO复用及IO复用服务端

在之前我们实现的并发服务端时通过床将多个进程来实现的,这种并实现并发的方式简单方便,但是进程的创建和销毁是很消耗系统资源的,在访问量大时服务器很容易出现资源不够用的情况。除此之外,由于每个进程有独立的...

利用mtd工具实现嵌入式设备在线升级

主要思路是:通过web post方式将升级文件交给CGI程序处理,然后通过mtd工具实现设备在线升级. 1.页面部分 update.cgi"> 选择升级文件:     这...

设备地址与IO内存映射

在嵌入式编程中,绝大部分功能都是通过驱动外设实现的,这些外设不仅可以是CPU外部的某种功能模块,也可以是CPU芯片内部集成的某些器件。这些芯片内部的外设基本都是通过总线的方式与CPU核心相连,而对它们...

Linux下SRAM的读写

项目中需要用ARM与FPGA进行通信,通信方式是通过FPGA生成的SRAM作为数据的交换区,ARM9芯片为ATMEL的AT91SAM9260,采用Linux 2.6.19的内核,今天搞了一天,总算是读...

嵌入式Linux应用程序访问物理地址的实例

嵌入式Linux应用程序访问物理地址的实例 2013-05-28 14:09:25   来源:EEWORLD    关键字: Linux  驱动  可移植  接口 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)