- 浏览: 10602 次
最新评论
CAsyncSocket::SetSockOpt全解
2012年01月01日
CAsyncSocket::SetSockOpt
BOOL SetSockOpt( int nOptionName, const void* lpOptionVlaue, int nOptionLen, int nLevel = SOL_SOCKET );
返回值:
调用成功时,返回非零值,否则为0,并可以调用GetLastError取得特定的错误代码。此成员函数可用的错误代码有: ??WSANOTINITIALISED在调用本API函数之前,必须已经成功地执行AfxSocketInit。??WSAENETDOWNWindows Sockets检测到网络系统故障。??WSAEFAULTlpOptionValue不是进程地址空间中的有效值。??WSAEINPROGRESS正在执行一个成块的Windows Sockets操作。??WSAEINVALnLevel无效,或者lpOptionValue中的信息无效。??WSAENETRESET当设置了SO_KEEPALIVE时,连接超时。??WSAENOPROTOOPT系统不支持该选项。SOCK_STREAM型的套接字不支持SO_BROADCAST,SOCK_DGRAM型的套接字不支持SO_DONTLINGER,SO_KEEPALIVE,SO_LINGER和SO_OOBINLINE等选项。??WSAENOTCONN当设置了SO_KEEPALIVE时,连接已经被重置??WSAENOTCONN套接字没有连接上(仅用于SOCK_STREAM型的套接字)。??WSAENOTSOCK描述符不是一个套接字。
参数: nOptionName准备设置值的套接字选项。lpOptionValue指向待设置的值所在缓冲的指针。nOptionLenlpOptionValue缓冲的字节数。nLevel选项定义所在的级别,系统支持的级别只有SOL_SOCKET和IPPROTO_TCP。
说明:
本函数用于设置套接字的选项。它可以设置任何类型和状态的套接字的选项,改变它们的当前值。虽然选项可以存在于协议的多个级别,本函数只设置协议的最高级别(socket)的选项。选项会影响套接字的操作,例如是否允许在普通数据流中接收快速传输的数据,是否允许在套接字中发送广播消息等等。
套接字选项分为两种:布尔型的选项(允许或者禁止某一功能),整数型或者结构型的选项。要允许某个布尔型的选项,lpOptionVlaue只需指向一个非零整数。禁止该选项时,lpOptionValue就指向一个等于0的整数。对布尔型的选项来说,nOptionLen应该和sizeof(BOOL)相等。对其它的选项来说,lpOptionValue指向包含了选项所需值的整数或者结构,nOptionLen则指明整数类型或者结构的长度。
SO_LINGER用于控制未发送数据在套接字上的排队方式,以及调用Close函数关闭套接字时的行为。要了解更详细的信息,请参阅联机文档“Win32 SDK”中的“Windows套接字编程注意事项”。
缺省时,套接字不能被绑定到一个正在使用的本地地址上。然而,在某些场合,希望能重用这些地址。既然每个连接是由本地地址和远地地址共同来唯一确定的,保持远地地址不同,同时让两个套接字绑定到同一个本地地址是完全可行的。
如果调用Bind时的地址已经被另一个套接字使用, Windows Sockets的实现会禁止这个绑定。为了避免这个情况,从而实现地址的重用,就需要在调用Bind之前,设置套接字选项SO_REUSEADDR。该选项只在调用Bind时才起作用。没有必要把一个没有重用地址的套接字的选项设为SO_REUSEADDR,在调用Bind后设置或者重置这个选项对任何套接字都不会发生影响。
应用可以设置SO_KEEPALIVE选项,从而可以使用Windows Sockets实现所提供的传输控制协议(TCP)的“保持活动”包(关于“keep-alive”包的详细内容,请参阅联机文档“Win32 SDK”中的“Windows套接字编程注意事项”)。Windows Sockets的具体实现不一定要支持“保持活动”包。如果要支持的话,它的精确语义可由实现定义,但必须和RFC1122中4.2.3.6节“Internet主机――通信层需求”阐述的内容一致。如果因为“保持活动”而删除了一个连接,在这个套接字上的任何调用都返回错误代码WSAENETRESET,以后的调用则返回错误代码WSAENOTCONN。
设置TCP_NODELAY选项可以禁止Nagle算法。Nagle算法缓冲主机发送的那些未被确认的小数据包,并组成一个大的数据包,从而减少了发送的数据包个数。然而,对某些应用来说,这样会影响效率,可以设置TCP_NODELAY来禁止Nagle算法。应用编程轻易不要把这个选项设置为TCP_NODELAY,因为它会对网络性能产生较大的负面影响。TCP_NODELAY是支持的唯一一个IPPROTO_TCP级别的套接字选项。Windows Sockets的某些实现可以通过设置SO_DEBUG选项来支持调试信息的输出。
SetSockOpt支持的选项如下表,类型列指的是lpOptionValue指向的数据类型。
值类型含义SO_BROADCASTBOOL允许在套接字上传输广播消息SO_DEBUGBOOL记录调试信息SO_DONTLINGERBOOL不成块等待未发送数据发送完的Close调用;设置本选项和在l_onofff=0时设置SO_LINGER等价SO_DONTROUTEBOOL不经路由转换:直接把数据发到接口SO_KEEPALIVEBOOL发送keep_alivesSO_LINGERstruct LINGER如果有未发送数据,则在Close时延时等待SO_OOBINLINEBOOL在普通数据流中接收带外数据SO_RCVBUFint设置接收数据的缓冲的大小SO_REUSEADDRBOOL允许套接字绑定到一个已经使用的地址上SO_SNDBUFint设置发送数据的缓冲的大小TCP_NODELAYBOOL禁止发送数据时的Nagle算法
SetSockOpt不支持的Berkeley软件发布(BSD)选项有: 值类型含义SO_ACCEPTCONNBOOL套接字正在监听,允许接收连接SO_ERRORint返回并清除错误状态SO_RCVLOWATint接收最低水准标志SO_RCVTIMEOint接收到超时消息SO_SNDLOWATint发送最低水准标志SO_SNDTIMEOint发送超时消息SO_TYPEint设置套接字的类型IP_OPTIONSint设置IP头上的选项字段
发表评论
-
signal(SIGPIPE, SIG_IGN)
2012-01-20 00:43 859signal(SIGPIPE, SIG_IGN) 2011年 ... -
NAT检测的类
2012-01-20 00:43 507NAT检测的类 2010年09月10日 // NatCh ... -
Android GSM驱动模块详细分析
2012-01-20 00:43 744Android GSM驱动模块详细分析 2011年04月15 ... -
java与flex通信
2012-01-20 00:43 505java与flex通信 2010年10月22日 一、准备 ... -
windows 程序设计之「NetTime.C」范例分析笔记
2012-01-20 00:43 731windows 程序设计之「NetTime.C」范例分析笔记 ... -
安装安卓虚拟机。XP亲测,win7请自行检验。
2012-01-17 01:00 979安装安卓虚拟机。XP亲测,win7请自行检验。 2011年1 ... -
PKI作业之证书加密导入导出C#操作
2012-01-17 01:00 658PKI作业之证书加密导入 ... -
VS2010编译安装boost
2012-01-17 01:00 714VS2010编译安装boost 2011年01月18日 ... -
DLL文件作用
2012-01-17 01:00 729DLL文件作用 2011年04月22日 aclui.dl ... -
C++ socket编程(tcp udp)
2012-01-15 19:43 453C++ socket编程(tcp udp) 2011 ... -
一个封装的C++ Socket类
2012-01-15 19:43 1054一个封装的C++ Socket类 2011年06月03日 ... -
C#托管Socket的实现方法
2012-01-15 19:43 684C#托管Socket的实现方法 2009年10月23日 ... -
C# Socket编程笔记
2012-01-15 19:43 493C# Socket编程笔记 2010年03月14日 看到 ... -
socket性能优化(上)
2012-01-15 19:43 586socket性能优化(上) 2012 ...
相关推荐
MFC疑难注解:CAsyncSocket及CSocket
使用CAsyncSocket可实现异步UDP 可在局域网内的不同PC上运行
void CChatSocket::OnAccept(int nErrorCode) { // TODO: Add your specialized code here and/or call the base class ... CAsyncSocket::OnAccept(nErrorCode); } void CChatSocket::OnClose(int nErrorCode) {
这是仿照《Visual C++ 网络通信编程实用案例精选》书中的聊天室开发的 CAsyncSocket 聊天室,原来的程序是使用 WSAAsyncSelect 和 CSocket 开发的,这个程序尝试使用 CAsyncSocket 实现了相同的功能。代码已使用 ...
用CAsyncSocket开发,可以省去线程管理的工作,用起来就一个字:爽! 本想不要资源分的,因为资源分对我来说并不紧张。但为了让您能够稍稍关注一下,就点了3分。 如果您觉得这个资源对您有帮助,请点一下赞。哦,...
CAsyncSocket TCP实例
一个简单且简陋的小测试程序,支持服务器对某客户端,服务器对所有客户端,客户端之间的通信。TCP Socket基于CAsyncSocket的非阻塞异步通信。效果图详见:http://blog.chinaunix.net/uid-28394603-id-5163195.html
用CAsyncSocket编的简单MFC聊天程序 基于TCP协议 可监听 可访问别的程序 局域网测试可用 互联网需映射
本文主要介绍利用MFC CAsyncSocket 类实现计算机间通信的一种方法,并对CAsyncSocket 类做了扼要的介绍,并举例加以详细说明
CAsyncSocket实现的聊天室,分为 服务端和客户端
csocket和casyncsocket的区别
CAsyncSocket类及其成员在网络编程中的使用方法讲解
基于mfc的dialog程序 使用CAsyncSocket完成一个简单的客户端 服务端程序 连接上后 客户端与服务器端可以相互通信 对于学习CAsyncSocket机制 我想对大家会有点帮助
对于学习如何运用c++ CAsyncSocket异步通信的程序员来说,看了这个文档基本上能对c++ CAsyncSocket运用自如
MFC使用CAsyncSocket类对网络通信的操作进行了封装简化,使得简单重写几个接口函数就可以进行网络通信。资源为客户端程序。 实例使用VS2010编写。
Csocket demo 跟CasyncSocket demo 。可以利用这两个demo重新改写符合 业务需求
基于CAsyncSocket的网络编程
使用CAsyncSocket进行无连接(UDP)通信-UDP SOCKET.
基于CasyncSocket类的聊天程序设计,制作的详细步骤及说明,服务器端以及客户端程序设计的步骤
Socket,CAsyncSocket,CSocket介绍对于编程人员很有用处,也是一种总结