`

获取和设置套接字选项

阅读更多
    下面几种方法可用来获取和设置影响套接字的选项:
    (1)getsockopt 和 setsockopt 函数;
    (2)fcntl 函数;
    (3)ioctl 函数。
    本文将介绍 getsockopt 和 setsockopt 函数,对 fcntl 的介绍见fcntl 函数介绍,而对 ioctl 的介绍则留到后面。
#include <sys/socket.h>
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);
                              /* 两个函数的返回值:若成功,返回 0;否则,返回 -1 */

    其中参数 sockfd 指向一个打开的套接字描述符,level 指定系统中解释选项的代码或为通用套接字代码,或为某个特定于协议的代码(如 IPv4、IPv6、TCP 或 SCTP)。optval 是一个指向某个变量的指针,setsockopt 从 *optval 处取得选项 optname 待设置的新值,getsockopt 则把已获取的选项 optname 的当前值存放到 *optval 中。*optval 的大小由 optlen 参数指定。
    套接字选项粗分为两大基本类型:一是启用或禁止某个特性的二元选项(称为标志选项),二是取得并返回可以设置或检查的特定值的选项(称为值选项)。下面的两张表汇总了可由 getsockopt 和 setsockopt 获取和设置的选项。其中的“数据类型”列给出了指针 optval 必须指向的每个选项的数据类型(这一列中后跟一对花括号的记法表示一个结构,如 linger{} 就表示 struct linger),标有“标志”的列指出一个选项是否为标志选项,当 *optval 的值是 0 时表示选项被禁止,反之则表示开启。如果“标志”列不含有“·”,那么相应选项用于在用户进程与系统之间传递所指定数据类型的值。


    其中的这几个套接字选项是由 TCP 已连接套接字从监听套接字继承的:SO_DEBUG、SO_DONTROUTE、SO_KEEPALIVE、SO_LINGER、SO_OOBINLINE、SO_RCVBUF、SO_RCVLOWAT、SO_SNDBUF、SO_SNDLOWAT、TCP_MAXSEG 和 TCP_NODELAY。这对 TCP 是很重要的,因为 accept 一直要到 TCP 层完成三路握手后才会给服务器返回已连接套接字。如果想在三路握手完成时确保这些套接字选项中的某一个是给已连接套接字设置的,那么必须先给监听套接字设置该选项。

  • 大小: 174.9 KB
  • 大小: 64.2 KB
分享到:
评论

相关推荐

    网络通信编程原始套接字程序设计ppt课件.ppt

    - `getsockopt()`和`setsockopt()`函数用于获取和设置套接字选项,这些选项可以控制套接字的行为,例如设置超时时间、接收模式等。 - 选项级别包括应用层的`SOL_SOCKET`、传输层的`IPPROTO_TCP`、`IPPROTO_UDP`...

    应用TCPIP的套接字开发网络通信应用程序

    此外,为了调试和日志记录,可以使用`getsockopt`和`setsockopt`函数获取和设置套接字选项,如查看TCP连接状态,或者设置超时等。 总的来说,应用TCP/IP的套接字开发网络通信应用程序是一个涉及网络原理、Winsock ...

    数据报套接字实现广播

    广播通信的实现通常需要设置套接字选项,比如`SO_BROADCAST`,允许套接字发送广播数据。 总结一下,数据报套接字实现广播涉及了UDP通信的基本操作,包括创建和绑定套接字,发送和接收数据报,以及设置广播功能。...

    Socket套接字—Java套接字编程

    7. **套接字选项**:Socket类提供了setSoTimeout(int timeout)方法设置超时时间,防止因客户端无响应导致服务器端阻塞。此外,还有其他选项如禁用Nagle算法(setTcpNoDelay(true)),设置缓冲区大小等。 8. **实践...

    网络套接字实例20个

    6. **套接字选项和控制消息**:展示如何使用`setsockopt()`和`getsockopt()`函数设置和获取套接字选项,以及如何处理套接字控制消息(如SOCKS)。 7. **错误处理和调试**:提供关于如何在代码中添加日志和错误处理的...

    基于winsock原始套接字的IP数据包的捕获与解析

    // 设置套接字选项 int opt = 1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt)); // 捕获IP数据包 char buffer[1024]; recv(sock, buffer, 1024, 0); // 解析IP数据包 IP...

    第5章 互联网广播和IP多播

    本章主要探讨了这两种通信方式以及相关的套接字选项和I/O控制命令。 首先,广播通信是指网络层服务,它允许一个节点将数据包发送到同一个广播域内的所有其他节点。这种通信模式常用于设备发现、网络配置等场景,...

    UNIX网络编程(第2版)卷1+卷2

    3. **套接字选项和控制消息**:讨论了如何使用getsockopt和setsockopt函数来获取和设置套接字选项,以及使用recvmsg和sendmsg函数处理控制消息。 4. **多路复用I/O**:介绍select、poll和epoll等机制,用于同时监控...

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

     8.2.1 获取和设置套接字选项  8.2.2 通用套接字选项  本章小结 第三篇 应用提高篇  第九章 高级套接字函数编程实践  9.1 函数recv和send  9.1.1 函数send  9.1.2 函数recv  9.1.3 应用...

    使用套接字接口创建客户端和服务器进程

    代码会包含定义套接字、设置套接字选项、进行错误处理等细节。例如,服务器端可能有一个循环不断接受新的连接,而客户端则可能在发送请求后等待服务器的回复。 值得注意的是,网络通信需要处理异步事件,如网络延迟...

    原始套接字实例:MAC 头部报文分析

    2. **设置套接字选项**:使用`setsockopt()`函数,通过IP_HDRINCL选项告诉内核我们希望在接收数据包时包含完整的IP头,而不是由内核处理。 3. **接收数据包**:使用`recvfrom()`函数接收数据包,获取完整的数据包,...

    java基于UNIX域套接字(unix domain socket)连接redis

    Redis提供了支持UNIX域套接字的选项,可以通过配置文件启用,并指定一个`.sock`文件,例如`redis.sock`。 在Java中,我们通常使用第三方库如Lettuce来操作Redis。Lettuce是一个强大的、线程安全的Redis客户端,支持...

    Unix网络编程及配套源代码

    此外,还有getsockopt()和setsockopt()用于获取和设置套接字选项,select()和poll()用于多路复用I/O。 四、网络地址和端口 在Unix网络编程中,网络地址通常表示为IP地址和端口号。IP地址标识网络上的主机,IPv4使用...

    unix network programming volum1 third version

    同时,作者介绍了如何正确处理网络编程中的错误,包括系统错误码、errno变量的使用,以及如何通过getsockopt和setsockopt函数来获取和设置套接字选项。 四、并发服务器设计 并发服务器是网络服务的基础,UNP提供了...

    java套接字编程笔记

    8. **套接字选项**:`Socket`和`ServerSocket`类提供了若干选项,如设置超时、启用/禁用 Nagle 算法等,可以通过`setSoTimeout()`、`setTcpNoDelay()`等方法调整。 9. **阻塞与非阻塞模式**:默认情况下,套接字...

    Oracle Solaris 9 - man pages section 3: Networking Library Funct

    5. **错误处理**:如 `getsockopt()` 和 `setsockopt()` 用于获取和设置套接字选项,帮助调试和优化网络通信。 6. **多路复用I/O**:`select()` 和 `poll()` 允许程序同时监控多个套接字,等待数据可用或超时。 7....

    linux系统中基于TCPIP套接字中间件的设计与实现

    - `getsockopt()`与`setsockopt()`:用于获取和设置与套接字相关的属性选项。 - `getsockname()`与`getpeername()`:获取本地和远程协议地址。 - **数据读取与发送**: - `bind()`:将本地名称与套接字绑定。 -...

    windows network programming(version2)

    7. **错误处理**:学习如何解析和处理Winsock返回的错误代码,以及使用`getsockopt`和`setsockopt`获取和设置套接字选项。 8. **关闭和清理**:正确使用`closesocket`关闭套接字,并通过`WSACleanup`来卸载Winsock...

    linux_网络编程API

    - `getsockopt()` 和 `setsockopt()`:用于获取和设置套接字选项。 在使用这些函数时,需要注意错误处理,例如检查返回值是否为-1,以及使用`errno`变量获取错误代码。同时,根据网络编程需求,可能还需要处理并发...

Global site tag (gtag.js) - Google Analytics