1.(一般不会立即关闭而经历的过程)后想继续重用该:
BOOL =TRUE;
(s, ,,(const char*)&,(BOOL));
2. 要是对于已然处在连接状况的soket, 在进行调用之后强行去关闭, 且不历经。
的过程:
BOOL = FALSE;
(s,,,(const char*)&,(BOOL));
3.运行send()时, 有时因网络状况等缘由, 发送过程无法按预期开展, 在recv()时, 同样有时会因网络状况等因素, 接收过程不能如预期去进行, 故而设置收发时限。
int =1000;//1秒
//发送时限
(,,,(char *)&,(int));
//接收时限
(,,,(char *)&,(int));
4.于send()操作之际, 所返回的乃是实际已然发送出去的字节数(同步状态下), 或者是发送至缓冲区中的字节数目。
(异步), 系统默认状态下, 发送和接收一次的量是8688字节, 约为8.5K, 而在实际过程里, 则会发送数据。
面对接收数据量较大的情况, 能够设置缓冲区, 进而避免了send()、recv()持续不断地循环进行收发操作:
// 接收缓冲区
int =32*1024;//设置为32K
(s,,,(const char*)&,(int));
//发送缓冲区
int =32*1024;//设置为32K
(s,,,(const char*)&,(int));
5. 假设处于发送数据之际, 期望不产生经由系统缓冲区至缓冲区的拷贝进而造成影响。
程序的性能:
int nZero=0;
(,,,(char *)&nZero,(nZero));
6.同样的情况, 在recv()这个函数那里完成上面所说的那种功能, 且默认的情形是把缓冲区当中的内容复制到系统缓冲区里:
int nZero=0;
(,,,(char *)&nZero,(int));
7.通常来讲, 于发送UDP数据报之际, 期望那要发送的数据具备广播的特性。
BOOL =TRUE;
(s,,,(const char*)&,(BOOL));
8.在连接服务器的进程里, 要是处于并非阻塞模式的状况下, 于()的进程当中能够。
进行设定()来使之延迟, 进而直至()被予以呼叫(此函数的设定唯有在非阻滞的进程里才具备明显的效果)
作用,在阻塞的函数调用中作用不大)
BOOL =TRUE;
(s,,T,(const char*)&,(BOOL));
9.要是于开始发送数据之际, send()运作未完结, 仍然存在数据尚未寄送的状况下然而则调用了(),在此前我们。
一般所采取的措施为“从容关闭”(s,), 然而数据是必定已经丢失了, 怎样进行设置才能够让程序去满足具体。
应用的要求(即让没发完的数据发送出去后在关闭)?
{
};
// 如果.=0;则功能和2.)作用相同;
.=5;//(容许逗留的时间为5秒)
(s,,,(const char*)&,());
设置套接口的选项。
#
const char FAR* , int );
s:标识一个套接口的描述字。
level:选项定义的层次;目前仅支持和层次。
:需设置的选项。
:指针,指向存放选项值的缓冲区。
:缓冲区的长度。
注释:
具有用于任意类型、任意状态套接口设置选项值功能的那个函数, 尽管在不同协议层上有选项存在, 然而此函数仅针对最高的“套接口”层次定义了选项, 这些选项会对套接口操作产生影响, 像加急数据于普通数据流里接收的情况, 以及广播数据能否从套接口发送之类的情况等等。
存在着两种套接口的选项, 一种是属于布尔型的, 该选项让一种特性得以允许或者被严禁掉, 另一种是整形或者结构类型选项。若准予一个布尔型选项, 那么会指向非零的整形数, 若禁止一个选项则指向一个等同于零的整形数。于布尔型选项而言, 会等同于 (int), 对于另外那些的选项, 指向包含所需选项要素的整形数或者结构东西, 与之对应的是而这些则是整形数或者结构的总长。其选项能够用来操控以下状况时的行动, 在套接口那儿有排队着准备要发送的数据存在,并且 ()调用已经被加以执行了。去参见 ()函数当中关于选项对 ()语义有所产生的影响。应用程序通过创建一个结构来设置相应的操作特性:
{
int ;
int ;
};
为了达成允许的状态, 应用程序需要把某个值设为非零, 至于另一个值要设为零, 或者设置成所需的以秒为单位的超时值, 之后再去调用()。为要实现允许(也就是禁止这种情况反过来的意思为), 应当把其设为零, 随后调用()。
在缺省状况下, 一个套接口没办法跟一个正处于使用状态的本地地址进行捆绑(可参考bind()), 然而有时会存在“重用”地址的需求。因每一个连接都是由本地地址以及远端地址的组合而唯一确定, 所以只要远端地址不一样, 两个套接口跟一个地址进行捆绑是没有问题的。为了告知套接口实现不要由于一个地址已被一个套接口使用因而不让它跟另一个套接口捆绑, 应用程序能够在bind()调用之前先去设置选项。请注意, 只有在bind()调用的时候, 这个选项才会被解释, 所以, 对于压根不会共用地址的套接口来说, 没有设立这套组选项是可以的这不算错误, 即便设置或者清除这个选项, 对正在bind()的这个套接口无效, 对其他套链接接口也是毫无影响力的, 不过这没什么坏处, 也不会出问题。
一个应用程序, 能够借由打开选项, 致使套接口达成在TCP连接情形下准许运用“保持活动”包。一个套接口实现并非必定须要支持“保持活动”, 然而要是支持的话, 具体的语义会和实现相关联, 应当遵循“主机要求-通讯层”里第4.2.3.6节的规范。要是有关连接因“保持活动”而失效, 那么正在进行的任何对该套接口的调用都会以错误返回, 后续的任何调用也会以错误返回。
选项对Nagle算法予以禁止, Nagle算法凭借把未确认的数据放置于缓冲区, 直至积攒够一个包才一同发送的方式, 以此来削减主机所发送的零碎小数据包的数量, 然而对于某些应用而言, 这般算法会致使系统性能下降, 故而能够用来把此算法关掉, 应用程序编写者唯有在确切知晓它的成效且确实有需求的情形下, 才去设置选项, 因为设置之后会对网络性能产生显著的负面作用, 它是唯一使用层的选项, 其他所有选项全都使用层。
要是进行了选项设置, 套接口供应商会受到鼓励(不过并非是必须的)去给出输出对应的调试信息。然而, 产生调试信息的机制, 还有调试信息的形式, 均已不在本规范所讨论的范畴之内了。
()支持下列选项。其中“类型”表明所指数据的类型。
选项 类型 意义
BOOL 允许套接口传送广播信息。
BOOL 记录调试信息。
应避免因数据尚未发送而致使关闭操作遭阻塞。设定此选项等同于把相应的元素指派为零。
BOOL 禁止选径;直接传送。
BOOL 发送“保持活动”包。
FAR* 如关闭时有未发送数据,则逗留。
BOOL 在常规数据流中接收带外数据。
int 为接收确定缓冲区大小。
布尔值, 许可套接口同一个正被使用着的地址进行捆绑动作(参照绑定方法)。
int 指定发送缓冲区大小。
BOOL 禁止发送合并的Nagle算法。
()不支持的BSD选项有:
选项名 类型 意义
BOOL 套接口在监听。
int 获取错误状态并清除。
int 接收低级水印。
int 接收超时。
int 发送低级水印。
int 发送超时。
int 套接口类型。
在IP头中设置选项。
返回值:
倘若没有出现错误状况, ()将会返回零。不然的话, 会返回错误情况, 应用程序能够经由()取得相应的错误代码。
错误代码:
:在使用此API之前应首先成功地调用()。
:套接口实现检测到网络子系统失效。
:不是进程地址空间中的一个有效部分。
:一个阻塞的套接口调用正在运行中。
:level值非法,或中的信息非法。
:当设置后连接超时。
存在未知的情况, 亦或是不给予支持的选项, 在此之中, 有着特定类型的套接口, 其并不支持该选项, 另外存在其他类型的套接口, 其不支持、、和选项。