getsockopt
前述:
有很多方法来获取和设置影响套接字的选项:
· fcntl函数,是把套接字设置为非阻塞式I/O型或者信号驱动式I/O型以及设置套接字属主的POSIX的方式
· ioctl函数
这篇文章只讨论getsockopt和setsockopt函数
函数原型:
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逼近函数y = exp(x);同样使用泰勒函数去逼近:exp(x) = 1 + x + (x)^2/(2!) + .. + (x)^n/(n!) + ...#!/usr/bin/pyth
转载自 MySQL greatest()和least()函数 MySQL GREATEST和LEAST函数介绍 GREATEST和LEAST函数都使用N个参数,并分别返回最大和
目标函数、损失函数、代价函数http://www.cnblogs.com/Belter/p/6653773.html注:代价函数(有的地方也叫损失函数,Loss Function)在机
(1)函数指针与指针函数 (1)函数指针 一种特殊的指针,它指向函数的入口; /* * 定义一个函数指针p,只能指向返回值为int,形参为两个int的函
1. 基本用法 1)仅对于list类型的数据 a.sort() 按升序 a.sort(reverse = True) 按降序 2)对于所有可排序类型的数据 sorted(a, reve