setsockopt()用法

上一篇 / 下一篇  2008-04-07 15:05:32

  #include <winsock.h>
RH2].p*tb} | uG0`0
#q hpCI k6kT0   int PASCAL FARsetsockopt( SOCKET s, int level, int optname,
e(m8Y(IXI1z0   const char FAR* optval, int optlen);51Testing软件测试网3CrR0f@!~9H
51Testing软件测试网i])n M!{2d3j
   s:标识一个套接口的描述字。51Testing软件测试网P&V jR"BB*c
   level:选项定义的层次;目前仅支持SOL_SOCKET和IPPROTO_TCP层次。51Testing软件测试网b(?[ WHY;i
   optname:需设置的选项。
Z{9]8zWS`0   optval:指针,指向存放选项值的缓冲区。51Testing软件测试网D6W$Ic!lZ
   optlen:optval缓冲区的长度。51Testing软件测试网 PFx[ o)h,\?4[

Ih/R4N;p2T!T9_@0注释:
:|(\M2b3O8LA-v0  setsockopt()函数用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。选项影响套接口的操作,诸如加急数据是否在普通数据流中接收,广播数据是否可以从套接口发送等等。51Testing软件测试网rx [R4fKoh
   有两种套接口的选项:一种是布尔型选项,允许或禁止一种特性;另一种是整形或结构选项。允许一个布尔型选项,则将optval指向非零整形数;禁止一个选项optval指向一个等于零的整形数。对于布尔型选项,optlen应等于sizeof(int);对其他选项,optval指向包含所需选项的整形数或结构,而optlen则为整形数或结构的长度。SO_LINGER选项用于控制下述情况的行动:套接口上有排队的待发送数据,且closesocket()调用已执行。参见closesocket()函数中关于SO_LINGER选项对closesocket()语义的影响。应用程序通过创建一个linger结构来设置相应的操作特性:51Testing软件测试网V2blwb9n[
   struct linger {
"xN(B9?9S KF/PNi0         int l_onoff;
K3I2t,JSmJH'D,u0         int l_linger;
!VjJuzOV0   };
k#F0l)CQ @0   为了允许SO_LINGER,应用程序应将l_onoff设为非零,将l_linger设为零或需要的超时值(以秒为单位),然后调用setsockopt()。为了允许SO_DONTLINGER(亦即禁止SO_LINGER),l_onoff应设为零,然后调用setsockopt()。51Testing软件测试网:K B#swKR*[
   缺省条件下,一个套接口不能与一个已在使用中的本地地址捆绑(参见bind())。但有时会需要“重用”地址。因为每一个连接都由本地地址和远端地址的组合唯一确定,所以只要远端地址不同,两个套接口与一个地址捆绑并无大碍。为了通知WINDOWS套接口实现不要因为一个地址已被一个套接口使用就不让它与另一个套接口捆绑,应用程序可在bind()调用前先设置SO_REUSEADDR选项。请注意仅在bind()调用时该选项才被解释;故此无需(但也无害)将一个不会共用地址的套接口设置该选项,或者在bind()对这个或其他套接口无影响情况下设置或清除这一选项。
6A n+zI6|B}0   一个应用程序可以通过打开SO_KEEPALIVE选项,使得WINDOWS套接口实现在TCP连接情况下允许使用“保持活动”包。一个WINDOWS套接口实现并不是必需支持“保持活动”,但是如果支持的话,具体的语义将与实现有关,应遵守RFC1122“Internet主机要求-通讯层”中第4.2.3.6节的规范。如果有关连接由于“保持活动”而失效,则进行中的任何对该套接口的调用都将以WSAENETRESET错误返回,后续的任何调用将以WSAENOTCONN错误返回。
]O~WVxZ+[0   TCP_NODELAY选项禁止Nagle算法。Nagle算法通过将未确认的数据存入缓冲区直到蓄足一个包一起发送的方法,来减少主机发送的零碎小数据包的数目。但对于某些应用来说,这种算法将降低系统性能。所以TCP_NODELAY可用来将此算法关闭。应用程序编写者只有在确切了解它的效果并确实需要的情况下,才设置TCP_NODELAY选项,因为设置后对网络性能有明显的负面影响。TCP_NODELAY是唯一使用IPPROTO_TCP层的选项,其他所有选项都使用SOL_SOCKET层。51Testing软件测试网i:J o6I y I%X
   如果设置了SO_DEBUG选项,WINDOWS套接口供应商被鼓励(但不是必需)提供输出相应的调试信息。但产生调试信息的机制以及调试信息的形式已超出本规范的讨论范围。51Testing软件测试网M KE'C|'P
  setsockopt()支持下列选项。其中“类型”表明optval所指数据的类型。51Testing软件测试网!p4t)?UE1}c
选项         类型   意义
1xJme/E{H$|C8?0SO_BROADCAST     BOOL     允许套接口传送广播信息。51Testing软件测试网/[R6s @/y
SO_DEBUG     BOOL     记录调试信息。51Testing软件测试网4i/E1b,BW-a$Z$e
SO_DONTLINER     BOOL     不要因为数据未发送就阻塞关闭操作。设置本选项相当于将SO_LINGER的l_onoff元素置为零。51Testing软件测试网Zi Yd M
SO_DONTROUTE     BOOL     禁止选径;直接传送。51Testing软件测试网riPRc
SO_KEEPALIVE     BOOL     发送“保持活动”包。
:s f/Tg~t6w*L)G0SO_LINGER    struct linger FAR*   如关闭时有未发送数据,则逗留。
6d%T;LsL/`;C0SO_OOBINLINE     BOOL     在常规数据流中接收带外数据。51Testing软件测试网&Zq@`Rv` O
SO_RCVBUF    int 为接收确定缓冲区大小。
0xmb&{HU)P};SBZ0SO_REUSEADDR     BOOL     允许套接口和一个已在使用中的地址捆绑(参见bind())。
G;tT$H8u:R9X0SO_SNDBUF    int 指定发送缓冲区大小。51Testing软件测试网_I1y:}TI-v.b1z
TCP_NODELAY BOOL     禁止发送合并的Nagle算法。
1T3N"mOOA ~a {0
(d!?6L` CA.R"tRA0  setsockopt()不支持的BSD选项有:51Testing软件测试网-qU BM8f&C4?o\
选项名       类型     意义
~"Zw XZo'V&_0SO_ACCEPTCONN    BOOL     套接口在监听。51Testing软件测试网4ofA%^ X3oX]FZh
SO_ERROR     int 获取错误状态并清除。51Testing软件测试网z$Lc-Y$E;n-b
SO_RCVLOWAT int 接收低级水印。
~PibW.B c5f0SO_RCVTIMEO int 接收超时。
s,sT*R a s orz3ObS0SO_SNDLOWAT int 发送低级水印。
:B6o+?*|c pnc0SO_SNDTIMEO int 发送超时。
%M hTO%AY*~7?0SO_TYPE      int 套接口类型。
yK7l7sYA%]0IP_OPTIONS       在IP头中设置选项。51Testing软件测试网)R5dv0v `U.Bi
51Testing软件测试网EIV7PV
返回值:
H3v ?r S2q0   若无错误发生,setsockopt()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。51Testing软件测试网l;S"FYgDht7{

Z){ S/d,N6_0错误代码:
b(?/V.At1`6d0   WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。51Testing软件测试网1vqK_[7g
   WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
} v&l&nlVv0   WSAEFAULT:optval不是进程地址空间中的一个有效部分。
o,aW)fF0jpC6g0   WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。51Testing软件测试网Qw{:v1O vW
   WSAEINVAL:level值非法,或optval中的信息非法。51Testing软件测试网 W$tYS{&VTId}l
   WSAENETRESET:当SO_KEEPALIVE设置后连接超时。51Testing软件测试网d$}:\A(so A8xn
   WSAENOPROTOOPT:未知或不支持选项。其中,SOCK_STREAM类型的套接口不支持SO_BROADCAST选项,SOCK_DGRAM类型的套接口不支持SO_DONTLINGER 、SO_KEEPALIVE、SO_LINGER和SO_OOBINLINE选项。51Testing软件测试网:K8?%qH j0b'V@
   WSAENOTCONN:当设置SO_KEEPALIVE后连接被复位。51Testing软件测试网1`|FkR#n&t`
   WSAENOTSOCK:描述字不是一个套接口。51Testing软件测试网&A[2cl _WXZ

&q4C9kg,y!u Gc0
©2008 Baidu

TAG:

 

评分:0

我来说两句

Open Toolbar