必威体育Betway必威体育官网
当前位置:首页 > IT技术

TCP/IP编程之getsockopt/setsockopt函数详解

时间:2019-08-15 07:41:06来源:IT技术作者:seo实验室小编阅读:57次「手机版」
 

getsockopt

前述:

有很多方法来获取和设置影响套接字的选项:

· getsockoptsetsockopt函数

· fcntl函数,是把套接字设置为非阻塞式I/O型或者信号驱动式I/O型以及设置套接字属主的POSIX的方式

· ioctl函数

这篇文章只讨论getsockoptsetsockopt函数

函数原型:

GETSOCKOPT(2)              linux Programmer's Manual             GETSOCKOPT(2)

NAME
       getsockopt, setsockopt - get and set options on sockets

SYNOPSIS
       #include <sys/types.h>          /* See NOTES */
       #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是一个指向某个变量(*optval)的指针,setsockopt从*optval中取得选项代设置的新值,getsockopt则把已获取的选项当前值存放到*optval中。*optval的大小由最后一个参数指定。

下面两个图汇总了TCP编程中常用的可由getsockopt获取或者setsockopt设置的选项。其中的"数据类型"列给出了指针optval必须指向的每个选项的数据类型。我们用后跟一对花括号的记法来表示一个结构,如linger{}表示struct linger。

套接字的选项粗分为两大基本类型:

一是启用或禁止某个特性的二元选项(称为标志选项)。

二是取得并返回我们可以设置或检查的特定值的选项(称为值选项)。

上图中标有"标志"的列指出一个选项是否为标志选项。当给这些标志选项调用getsokopt函数时,*optval是一个整数,*optval中返回的值为0表示相应选项被禁止,不为0表示选项被启用。类似地,setsockopt函数需要一个不为0的*optval值来启用选项,一个为0的*optval值来禁止选项。如果上图中“标志”列不含有“·”,那么相应选项用于在用户进程和系统之间传递所指定数据类型的值。

伪代码,禁用Nagle算法

sockfd = socket(AF_INET, SOCK_STREAM, 0);
flag = 1;   
int ret = setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, sizeof(flag));
if (ret == -1) {   
    printf("Couldn't setsockopt(TCP_NODELAY)\n");   
}

ps:有兴趣的同学,应该把《unix网络编程》·卷1·第七章细看,此文只是摘录了部分内容,并没有对optname的选项做细致的讲解分析。

参考:《unix网络编程》·卷1

相关阅读

python画出e指数函数的图像

这里用Python逼近函数y = exp(x);同样使用泰勒函数去逼近:exp(x) = 1 + x + (x)^2/(2!) + .. + (x)^n/(n!) + ...#!/usr/bin/pyth

MySQL greatest()和least()函数

转载自  MySQL greatest()和least()函数 MySQL GREATEST和LEAST函数介绍 GREATEST和LEAST函数都使用N个参数,并分别返回最大和

目标函数、损失函数、代价函数

目标函数、损失函数、代价函数http://www.cnblogs.com/Belter/p/6653773.html注:代价函数(有的地方也叫损失函数,Loss Function)在机

C/C++函数指针与指针函数等区别

(1)函数指针与指针函数 (1)函数指针 一种特殊的指针,它指向函数的入口; /* * 定义一个函数指针p,只能指向返回值为int,形参为两个int的函

【python基础】sort函数

1. 基本用法 1)仅对于list类型的数据 a.sort() 按升序 a.sort(reverse = True) 按降序 2)对于所有可排序类型的数据 sorted(a, reve

分享到:

栏目导航

推荐阅读

热门阅读