b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

setsockopt_setsockopt accept_setsockopt设置超时(9)

电脑杂谈  发布时间:2017-05-28 06:12:46  来源:网络整理

z = setsockopt(s,

SOL_SOCKET,

SO_KEEPALIVE,

&so_keepalive,

sizeof so_keepalive);

if ( z )

perror("setsockopt(2)");

在上面的例子中设置了SO_KEEPALIVE选项,这样当套接口连接空闲相当长的时间时,一个探测信息(probe message)就会发送到远程端。这通常是在两个小时的无活动后完成的。对于一个保持活动的探测信息会有三个可能的反应。他们分别是:

1 端会合适的返回表明一切正常。并没有向程序返回任何指示信息,因为这是程序假定的开始。

2 端响应表明他对连接一无所知。这表明端自上次通信以后与主机进行重新连接。这样当下次套接口操作时会向程序返回ECONNRESET错误代码。

3 端没有响应。在这种情况下,内核也许做了几次尝试进行连接。如果没有响应请求,TCP通常会在大约11分钟内放弃。当这种情况发生时,在下次套接口操作时会返回ETIMEOUT错误。其他的错误,例如EHOSTUNREACH会在网络不再能到达主机时返回。

SO_KEEPALIVE 所调用的时间框架会限制他通常的用处。探测信息也只在大约两个小时的无活动后才会发送。然后,当没有响应时,在连接返回错误时还需要另外的11分钟。无论怎样,这个选项确实允许探测空闲的无连接套接口,然后由服务器进行关闭。相应的,支持长空闲连接的服务器应允许这个特征。

设置SO_BROADCAST选项

我们现在还没有讨论到使用UDP进行广播的主题。然而,我们很容易意识到广播功能的误用以及所造成的网络灾难。为了避免在没有计划广播时进行广播,套接口禁用了广播功能。如果确实需要广播,那么C程序员要为套接口的这个功能处理相应的麻烦。

SO_BROADCAST是一个布尔标志选项,由int数据类型进行设置。下面的例子显示了如何设置SO_BROADCAST选项:

#define TRUE 1

#define FALSE 0

int z; /* Status code */

int s; /* Socket s */

int so_broadcast;

...

so_broadcast = TRUE;

z = setsockopt(s,

SOL_SOCKET,

SO_BROADCAST,

&so_broadcast,

sizeof so_broadcast);

if ( z )

perror("setsockopt(2)");

如果要setsockopt函数返回零,套接口s已经允许进行广播。然而在这里要注意的是所选用的套接口类型必须具有广播功能,例如UDP套接口。

设置SO_OOBINLINE选项

在一些情况下,已发送的数据也许会超过所限制的数据量。通常,这些越界的数据是用不同于通常的数据接收函数来进行接收的。然而有时却更喜欢使用通常的方式来接收这些越界数据。当选择这种方法时,越界数据作为通常数据流的一部分在通常数据之前到达。

要使用这个特征,我们可以用下面的代码来完成:

#define TRUE 1

#define FALSE 0

int z; /* Status code */

int s; /* Socket s */

int so_oobinline;

...

so_oobinline = TRUE;

z = setsockopt(s,

SOL_SOCKET,

SO_OOBINLINE,

&so_oobinline,

sizeof so_oobinline);

if ( z )

perror("setsockopt(2)");

在设置了SO_OOBINLINE选项之后,越界数据就会与通常数据一起接收。在这种方式下,所接收的越界数据与通常数据相同。

SO_PASSCRED与SO_PEERCRED选项

这些选项仅适用于PF_UNIX(PF_LOCAL)套接口。这些选项用来在当前主机的本地套接口上控制与传递凭证。这也许是最难掌握的一个主题。就现在而言,我们只需要简单的注意到,如果我们希望编写服务本地主机客户的服务程序时,我们也许会对这两个选项感兴趣。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49663-9.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...