设置socket IP_TOS选项 (转载)

转自:http://zhangjunxin520.blog.163.com/blog/static/305037032011721102857609/

在IP头中,有一Type-of-Service字段,该字段描述了IP包的

优先级和QoS选项,使用IP_TOS可以来设定该字段的值:

使用setsockopt设置IP_TOS代码如下:

unsigned char  service_type = 0xe0 | IPTOS_LOWDELAY | IPTOS_RELIABILITY;

if(setsockopt(sock, SOL_IP/*IPPROTO_IP*/, IP_TOS, (void *)&service_type, sizeof(service_type)) < 0)

perror("setsockopt(IP_TOS) failed:");

使用getsockopt读取IP_TOS代码如下:

int optval = 0;

int optlen = sizeof(optval);

if(getsockopt(sock, SOL_IP, IP_TOS, (void *)&optval, &optlen) < 0)

perror("getsockopt(IP_TOS) failed:");

else

printf("OPTVAL=%x.\n", optval)

在socket设置IP_TOS后,用wireshark抓取该socket上发送的数据,查看IP头部可以看到设置的值。

附man手册中IP_TOS、SO_PRIORITY说明:

IP_TOS:  SOL_IP / IPPROTO_IP(BSD);  IP_TOS Set  or  receive  the  Type-Of-Service (TOS)  field

that is sent with every IP packet originating from this socket.  It is used to prioritize packets

on the network.  TOS is a byte. There are some standard TOS flags defined:

IPTOS_LOWDELAY to minimize delays for interactive traffic, IPTOS_THROUGHPUT to

optimize throughput, IPTOS_RELIABILITY to optimize for reliability, IPTOS_MINCOST

should be used for "filler data"  where  slow transmission doesn‘t matter.  At most one of these

TOS values can be specified.  Other bits are invalid and shall be cleared.  Linux sends

IPTOS_LOWDELAY datagrams first by default, but the exact behaviour depends on the

configured queueing discipline.  Some high priority levels may require superuser

privileges (the CAP_NET_ADMIN capability).  The priority can also be set in a protocol

independent way by the (SOL_SOCKET,  SO_PRIORITY) socket option (see socket(7)).

SO_PRIORITY:  SOL_SOCKET;  SO_PRIORITY Set the protocol-defined priority for all packets to be

sent on this socket.  Linux uses this value to order the networking queues: packets with a

higher priority may be processed  first  depending on  the  selected device queueing

discipline. For ip(7), this also sets the IP type-of-service (TOS) field for outgoing packets.

Setting a priority  outside the range 0 to 6 requires the CAP_NET_ADMIN capability.

时间: 2024-07-31 17:33:47

设置socket IP_TOS选项 (转载)的相关文章

java Socket(详解)转载

在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据. 这篇文章首先介绍Socket类的各个构造方法, 以及成员方法的用法, 接着介绍 Socket的一些选项的作用, 这些选项可控制客户建立与服务器的连接, 以及接收和发送数据的行为. 一. 构造Socket Socket的构造方法有以下几种重载形式:

性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项 (转载)

原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server-auto-update-and-auto-create-statistics-options/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=2012913 统计信息是如何提高SQLServer查询性能的?统计直方图用作在查询执行计划中查询优化器的选择依据.

setsockopt 设置TCP的选项SO_LINGER

SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成. 没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工作并返回.如果设置了SO_LINGER选项,并且等待时间为正值,则在清理之前会等待一段时间. 以调用close()主动关闭为例,在发送完FIN包后,会进入FIN_WAIT_1状态.如果没有延迟关闭(即设置SO_LINGER选项),在调用tcp_send_fin()发送FIN后会立即调用sock_orphan()将sock结构从进程上下

聚集索引和填充因子fill factor的设置,减少死锁(转载)

我的数据库很容易死锁,我后来发现是聚集索引引起的,我的索引填充因子是90,后来我把聚集索引去掉,问题就解决了,但是我不明白聚集索引为什么会引起死锁?? 你的填充因子设置得不对         聚集索引代表了表中记录的存储顺序,所以每次数据的变化,都可能导致表中的数据按照聚集索引重新调整顺序         而填充因子设置为90,这是偏向于减少索引空间占用的做法,这样的做法导致为了减少索引的空间占用,使数据页的空闲空间很小     在向一个已满的索引页添加某个新行时,SQL   Server  

setsockopt设置socket状态

setsockopt设置socket状态 1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FAL

设置socket接收和发送超时的一种方式

Linux环境设置Socket接收和发送超时: 须如下定义:struct timeval timeout = {3,0};  //设置发送超时setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval)); //设置接收超时setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval)); 另外

Excel的单元格设置下拉选项并填充颜色

如何在Excel的单元格中加入下拉选项 方法/步骤   第一步:打开excel文档,选中需加入下拉选项的单元格.  第二步:点击菜单中的"数据"->"数据有效性"->"数据有效性".   第三步:在弹出的页面中设置菜单下,点击"允许"下选择"序列"按钮.   第四步:在来源中输入单元格中需设置的下拉选项,用英文的逗号","隔开,然后点击确定按钮. 即可得到我们要的效果. 怎么

TextView使用SpannableString设置复合文本【转载】

TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能: 1.BackgroundColorSpan 背景色2.ClickableSpan 文本可点击,有点击事件3.ForegroundColorSpan 文本颜色(前景色)4.MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter).浮雕(EmbossMaskFilter)5.MetricAf

【c#】设置Socket连接、接收超时(转)

用到Socket,发现如果连接错误,比如Connect的端口不对,会造成很长时间的延时,程序就僵在那里,效果很不好: 在网上找到很方便的设置办法,分享如下: Socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,1000); 设置Socket接收超时,时长为1000毫秒,这样1秒之后就会收到反馈,比之前强多了: