Linux套接字编程之套接字选项

套接字机制提供了两个套接字选项接口来控制套接字的行为。一个接口用来设置选项,另外一个接口用来允许我们请求选项的状态。我们可以获得以及设置三种类型的选项。

1.通用选项,可以工作在所有的套接字类型。

2.在套接字层次上面进行管理的选项,但是依赖底部协议的支持。

3.和每个协议相关的协议选项。

Single UNIX Specification 只定义了套接字层的选项(上面所提到的前面两项)

我们可以通过setsockopt函数来设置套接字选项。

#include <sys/socket.h>

int setsockopt(int sockfd, int level, int option, const void *val, socklen_t len);

返回:如果成功返回0,如果错误返回1。

参数level用来分辨option所应用的协议。如果option是通用套接字层次的选项,那么level设置成SOL_SOCKET。否则level设置成控制option的协议号。例如IPPROTO_TCP用于TCP选项,以及IPPROTO_IP用于IP选项。下面的表中就列出了Single UNIX Specification定义的通用的套接字层次的选项。

     套接字选项

+-------------------------------------------------------------------------------------------------------------+

|    Option     | Type of val argument |                             Description                              |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_ACCEPTCONN | int                  | 返回套接字是否激活用于侦听(只用于getsockopt)。                     |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_BROADCAST  | int                  | 如果*val非0那么广播数据报。                                          |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_DEBUG      | int                  | 如果*val非0那么激活网络驱动的调试。                                  |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_DONTROUTE  | int                  | 如果*val非0,那么忽略通常的路由。                                    |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_ERROR      | int                  | 返回并且清除提交的套接字错误(只用于getsockopt)。                   |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_KEEPALIVE  | int                  | 如果*val非0,那么激活定期活动的消息。                                |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_LINGER     | struct linger        | 如果有未发送的消息存在以及套接字关闭,那么做延迟。                   |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_OOBINLINE  | int                  | 如果*val非0,那么将带外数据嵌入到正常数据中。                        |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_RCVBUF     | int                  | 接收缓存的字节大小。                                                 |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_RCVLOWAT   | int                  | receive调用返回的最小数据字节。                                      |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_RCVTIMEO   | struct timeval       | 套接字receive调用的超时值。                                          |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_REUSEADDR  | int                  | 如果*val非0,那么重复使用bind的地址。                                |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_SNDBUF     | int                  | send缓存中的字节大小。                                               |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_SNDLOWAT   | int                  | 一次send调用传输的最小数据字节量。                                   |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_SNDTIMEO   | struct timeval       | 一个套接字send调用的超时值。                                         |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_TYPE       | int                  | 辨别套接字类型(只在getsockopt中)。                                 |

+-------------------------------------------------------------------------------------------------------------+

时间: 2024-10-26 14:32:48

Linux套接字编程之套接字选项的相关文章

windows和linux的tcp套接字编程实例代码

windows下面的代码如下面 //Server.cpp #include <iostream> #include <windows.h> #define IP "127.0.0.1" #define PORT 8888 #pragma comment(lib,"ws2_32.lib") using namespace std; char* GetTime(); int main() {     WSADATA wsaData;     WO

[python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

        很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识                 C#网络编程之使用Socket类Send.Receive方法的同步通讯        Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内

TCP套接字编程模型及实例

摘要:     本文讲述了TCP套接字编程模块,包括服务器端的创建套接字.绑定.监听.接受.读/写.终止连接,客户端的创建套接字.连接.读/写.终止连接.先给出实例,进而结合代码分析.   PS:本文权当复习套接字编程的读书笔记.   一.TCP套接字编程模型     同一台计算机上运行的进程可以利用管道.消息队列.信号量.共享内存等进行相互通信,不同计算机上运行的进程可以通过套接字网络IPC接口进行相互通信.套接字编程基本步骤如下图所示: 图 TCP套接字编程模型[1] 二.源代码     本

PHP套接字编程

编程 作者:久隆信息/张晓刚 套接字编程,一般使用c或c++.特别的在web应用程序开发中,常用perl实现套接字.除此以外,用php进行套接字编程也是一个选择.Php可以胜任吗?当然可以.Php是一门高质量的web应用程序开发语言,他的许多特性可以处理众多的任务,网络编程也不例外. 1. 理解套接字 Mail.ftp.telnet.name和finger这些服务都是在一个专用的公开的端口上提供的,通过连接到这些端口,客户程序就能够访问这些服务.这与现实生活是相似的--当需要干洗衣服的时候,找干

Windows Socket网络编程(二) 套接字编程原理

一.客户机/服务器模式 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model).该模式的建立基于以下两点:1.非对等作用:2.通信完全是异步的.客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下) 1.打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求. 2.等待客户请求到达该端口. 3.接收到重复服务请求,处理该请求并发送应答信号. 4.返回第二步,等待另一客户

C# 网络编程之套接字编程基础知识

      最近阅读了周存杰编写的<C#网络编程实例教程>并阅读了很多相关方面的资料,同时自己也做了一些套接字编程方面的C#程序,所以根据它的知识总结了最近的套接字编程的一些知识点,方便自己的理解与他人的学习,同时也有一些自己以前学习的计算机网络.操作系统等相关知识. 一.   套接字编程的概念       套接字(Winsock)是一种独立于协议的网络编程接口,在OSI中集中在会话层和传输层.(补充知识)简单回归网络知识,计算机网络中的"五层协议的体系结构"和"

udp-C++套接字编程遇到问题,求助大神

问题描述 C++套接字编程遇到问题,求助大神 小弟大学党,操作系统老师布置作业,写一个可以实现收发报文的小程序,要求使用socket套接字.自己去网上查找资料,尝试写了一个,开始单独收或者单独发的时候都没问题,但是想把收发的功能整合到一个程序里面的时候遇到问题. 我用的是UDP点对点通信机制,测试的时候,用了寝室同学的电脑,两台电脑在相同平台下(vc++ 6.0)编译运行,在编译之前把接收绑定的地址和发送地址对调(我这里的发送地址对应他那边的接收地址,地址都是在本地连接上查看的).但是我发现,我

套接字编程简介

套接字编程简介 项目:UNIX网络编程学习 作者:曾金龙 供职:(深圳迅雷网络技术股份有限公司) 领域:迅雷下载库研发 日期:2014-07-25 1, TCP连接图 socket编程,过眼烟云的去看,无外乎就那么几个API,但是,如果想登堂入室,必须注重里面的每一个细节. 对于TCP编程而言,最重要的是记住这么一幅图.死记的基础上理解. windows下有visio,ubuntu下只好用Dia,不是很习惯,而且不支持中文输入. 图1 TCP连接的数据包交换图 你特别需要注意的是: 1)哪个地方

网络数据抓包 windows- VC++ 用原始套接字编程,怎样抓取网页响应数据?

问题描述 VC++ 用原始套接字编程,怎样抓取网页响应数据? 在网上找了很多方法,都是只能抓取发出的请求数据,没有响应数据 recv(sock, recvInf, sizeof(recvInf), 0);//接收包 windows环境下,VS2015 解决方案 参考:http://www.codeproject.com/Articles/17031/A-Network-Sniffer-in-Chttp://www.netresec.com/?page=RawCap 解决方案二: 这个是开发给特定