VxWorks网络系统(2) – setsockopt设置套接字选项函数

原创 2007年09月25日 15:02:00

 

VxWorks网络系统(2) – setsockopt设置套接字选项函数  

// Make the socket sending alive messages when connected
int flag = 1;
setsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&flag, sizeof(flag));
 
// increase receive buffer size
flag = SOCKET_BUF_SIZE;
setsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, (char*)&flag, sizeof(flag));
 
// increase send buffer size
setsockopt(m_socket, SOL_SOCKET, SO_SNDBUF, (char*)&flag, sizeof(flag));
 
// try without the nagle algorithm
flag = 1;
setsockopt (m_socket, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof (flag));
 
// Prevent "bind error 48"!
flag = 1;
setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, (char*)&flag, sizeof(flag));
 
SOCK_STREAM型套接字支持SO_KEEPALIVE选项,SOCK_DGRAM型套接字不支持。缺省没有启用保活机制。基本套接口选项SO_KEEPALIVE用于检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。设置该选项后,如果2小时内在此套接口的任一方向都没有数据交换,TCP就自动给对方发一个保持存活探测分节(keep alive probe)。这是一个对方必须响应的TCP分节. 它会导致以下三种情况:对方接收一切正常:以期望的ACK响应。2小时后,TCP将发出另一个探测分节。对方已崩溃且已重新启动:以RST响应。套接口的待处理错误被置为ECONNRESET,套接口本身则被关闭。对方无任何响应:源自berkeleyTCP发送另外8个探测分节,相隔75秒一个,试图得到一个响应。在发出第一个探测分节11分钟15秒后若仍无响应就放弃。套接口的等待处理错误被置为ETIMEOUT,套接口本身则被关闭。如ICMP错误是“host unreachable(主机不可达)”,说明对方主机并没有崩溃,但是不可达,这种情况下待处理错误被置为EHOSTUNREACH
 
IPPROTO_TCP: TCP套接口
 
尽管有许多TCP选项可供程序员操作,而我们却最关注如何处置其中的两个选项,它们是TCP_NODELAY TCP_CORK,这两个选项都对网络连接的行为具有重要的作用。
TCP_NODELAYTCP_CORK基本上控制了包的“NagleNagle化在这里的含义是采用Nagle算法把较小的包组装为更大的帧。现在让我们假设某个应用程序发出了一个请求,希望发送小块数据。我们可以选择立即发送数据或者等待产生更多的数据然后再一次发送两种策略。如果我们马上发送数据,那么交互性的以及客户/服务器型的应用程序将极大地受益。例如,当我们正在发送一个较短的请求并且等候较大的响应时,相关过载与传输的数据总量相比就会比较低,而且,如果请求立即发出那么响应时间也会快一些。以上操作可以通过设置套接字的TCP_NODELAY选项来完成,这样就禁用了Nagle算法。
 
SO_REUSEADDR选项的设置将套接口设置成重新使用旧的地址(IP地址加端口号)而不等待.
如果一个socket绑定了某个端口,该socket正常关闭或程序退出后,在一段时间内该端口依然保持被绑定的状态,其他程序(或者重新启动的原程序)无法绑定该端口。这由 TCP 套接字状态TIME_WAIT引起。该状态在套接字关闭后约保留 2 4 分钟。在TIME_WAIT状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。等待TIME_WAIT结束可能是令人恼火的一件事,特别是如果您正在开发一个套接字服务器,就需要停止服务器来做一些改动,然后重启。幸运的是,有方法可以避开TIME_WAIT状态。可以给套接字应用SO_REUSEADDR套接字选项,以便端口可以马上重用。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

socket默认的套接字选项,setsockopt/getsockopt

一、getsockopt/setsockopt 函数 #include /* See NOTES */ #include int ge...

套接字选项setsockopt()

套接字选项这个话题在socket编程里,可能已经属于中高级话题了,之所以在 一开始就把这个话题提上来讲,是因为我们的一个近阶段目标是能够把 MY_PF_INET域的RAW协议走通,并在上面跑起一个pi...

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

SOL_SOCKET协议族选项获取和设置套接字选项 SO_KEEPALIVE选项 SO_LINGER选项 SO_RCVBUF和SO_SNDBUF选项 SO_RCVLOWAT和SO_SNDLOWAT选项...

《UNIX网络编程》笔记——套接字选项

一、操纵套接字选项的方法1、getsockopt和setsockopt函数这两个函数仅用于套接字#include int getsockopt(int sock, int level, int...

UNIX网络编程 TCP套接字选项

一直想写一下TCP通信的事, 套接字选项: SO_DEBUG:当给一个TCP套接字开启本选项时, 内核将为TCP在该套接字发送和接收的所有分组保留详细跟踪信息。 SO_DONTROUTE:本选...

我的网络编程学习之路——套接字选项

1.1 概述 我们可以使用很多方法来获取和设置影响套接字的选项: getsockopt 和 setsockopt 函数;fcntl 函数;ioctl 函数。 我们会从介绍getsockopt 和 ...

UNP函数笔记五: 套接字选项

第七章  套接字选项: #include int getsockopt(int sockfd, int level, int optname, void * opt...

Unix网络编程学习笔记之第7章 套接字选项

一、获取/设置套接字选项的方法 一个套接字描述符相关联的套接字选项很多。获取/设置套接字选项的方法: 1.  getsockopt和setsockopt函数 2. fcntl函数 3. ioc...

UNIX网络编程笔记 第七章 套接字选项

getsockopt和setsockopt函数:#include int getsockopt(int fd, int level, int optname, void *optval, sockl...

(七)Linux网络编程--7. TCP/IP协议 8. 套接字选项

你也许听说过TCP/IP协议,那么你知道到底什么是TCP,什么是IP吗?在这一章里面,我们一起来学习这个目前网络上用最广泛的协议. 7.1 网络传输分层 如果你考过计算机等级考试,那么...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)