CAsyncSocket::SetSockOpt
调用该成员函数的一组套接字选项。
BOOL SetSockOpt(
int nOptionName,
const void* lpOptionValue,
int nOptionLen,
int nLevel = SOL_SOCKET
);
参数
nOptionName
该值将设置的套接字选项。lpOptionValue
到该请求选项的值所提供的缓冲区的指针。nOptionLen
lpOptionValue 缓冲区的大小(以字节为单位)。nLevel
选项定义的级别;仅支持的秩是 SOL_SOCKET 和 IPPROTO_TCP。
返回值
非零,如果函数运行成功;否则0和特定错误代码可以通过调用 GetLastError检索。 下面的错误适用于此成员函数:
WSANOTINITIALISED 的成功的 AfxSocketInit 必须在使用此API之前发生。
WSAENETDOWN Windows套接字实现检测网络子系统失败。
WSAEFAULT lpOptionValue 不对进程地址空间有效的部分。
块Windows套接字操作的WSAEINPROGRESS 的进度中。
WSAEINVAL nLevel 无效,或在 lpOptionValue 的信息无效。
WSAENETRESET 连接超时在 SO_KEEPALIVE 设置。
WSAENOPROTOOPT 选项卡未知或不支持的。 具体而言,而 SO_DONTLINGER、 SO_KEEPALIVE、 SO_LINGER和 SO_OOBINLINE 在类型 SOCK_DGRAM,套接字不支持 SO_BROADCAST 在类型 SOCK_STREAM套接字不受支持。
WSAENOTCONN 连接,当 SO_KEEPALIVE 设置时,重置。
WSAENOTSOCK 描述符不是套接字。
备注
SetSockOpt 组套接字选项的当前值与任何类型套接字,在任何状态。 尽管选项可以存在于多个协议级别,此规范只定义位于级别最高的“套接字”的选项。 选项影响套接字操作,例如加快的数据是否在正常数据流接收,广播的信息是否位于套接字可以发送,依此类推。
具有套接字选项的两种类型:启用或禁用功能或行为的布尔需要一个整数值或结构的选项和选项。 若要启用一个布尔值选项,lpOptionValue 指向一个非零整数。 若要禁用选项 lpOptionValue 指向整数等于零。 nOptionLen 应与布尔值选项的 sizeof(BOOL)。 对其他选项,lpOptionValue 指向包含选项所需的值的整数或结构,因此,nOptionLen 为整数或结构的长度。
SO_LINGER 控件执行的操作,当未送出的数据在套接字排队时,并 Close 函数调用关闭套接字。
默认情况下,套接字不能绑定(请参见 绑定)添加到已被使用的本地地址。 但是,在某些情况下,“这样的重新使用”地址可能适用。 因为每个连接是由本地和远程地址的组合唯一标识,不具有两个套接字的问题都绑定到同一个本地地址,只要远程地址是不同的。
不应禁止要通知Windows套接字实现 Bind 在套接字调用,因为所需的地址被另一个套接字已被使用,应用程序应在问题 Bind 之前设置套接字的 SO_REUSEADDR 套接字选项称为。 请注意选项卡 Bind 期间进行解释调用:)因此不必(不过,无害的设置在不要绑定到现有地址的套接字的选项,并且,设置或重置选项卡 Bind 后调用没有此或其他套接字的效果。
应用程序可以请求Windows套接字实现通过打开 SO_KEEPALIVE 套接字选项可以使用“在传输控制协议(TCP)连接的维弧”数据包。 Windows套接字实现不需要支持使用维弧:如果它,准确的语义是特定于实现的,但应匹配区分4.2.3.6 RFC 1122:“Internet宿主—通信层的要求”。如果连接被删除由于“维弧”错误代码 WSAENETRESET 返回任何调用正在进行套接字,因此,所有的后续调用将失败并 WSAENOTCONN。
TCP_NODELAY 选项禁用Nagle算法。 Nagle算法减少一个宿主发送的小的数据包的数目超过缓冲区未识别发送数据,直至可以发送一个大型数据包。 但是,对于此类情况,某些应用程序的此算法可能会影响性能和 TCP_NODELAY 可以使用将其关闭。 应用程序编写器不应设置 TCP_NODELAY,除非采用影响了解和需要,从设置 TCP_NODELAY 可以对web性能显着负面影响。 TCP_NODELAY 是使用级别 IPPROTO_TCP的唯一支持的套接字选项;其他选项使用级别 SOL_SOCKET。
如果 SO_DEBUG 选项由应用程序,设置Windows套接字提供输出的某些实现调试信息。
以下选项对 SetSockOpt支持。 类型标识 lpOptionValue解决的数据类型。
值 |
类型 |
含义 |
---|---|---|
SO_BROADCAST |
BOOL |
允许广播的消息传输是在套接字的。 |
SO_DEBUG |
BOOL |
记录调试信息。 |
SO_DONTLINGER |
BOOL |
不要阻止等待未送出的数据的 Close 发送。 将此选项设置为 SO_LINGER 等效和 l_onoff 设置为零。 |
SO_DONTROUTE |
BOOL |
不要路由:发送直接添加到接口。 |
SO_KEEPALIVE |
BOOL |
发送维弧。 |
SO_LINGER |
结构则等待并 |
;如果未送出的数据存在,请则等待并在 Close。 |
SO_OOBINLINE |
BOOL |
获得常规数据流的带外数据。 |
SO_RCVBUF |
int |
指定缓冲区大小来接收。 |
SO_REUSEADDR |
BOOL |
允许套接字绑定到已被使用的地址。 (请参见 绑定。) |
SO_SNDBUF |
int |
指定缓冲区大小用于发送。 |
TCP_NODELAY |
BOOL |
为发送合并禁用 Nagle 算法。 |
Berkeley Software Distribution为 SetSockOpt 不支持的(BSD)选项是:
值 |
类型 |
含义 |
---|---|---|
SO_ACCEPTCONN |
BOOL |
存储在侦听 |
SO_ERROR |
int |
获取错误条件并清除。 |
SO_RCVLOWAT |
int |
接受最低水位标记。 |
SO_RCVTIMEO |
int |
接收超时 |
SO_SNDLOWAT |
int |
发送最低水位标记。 |
SO_SNDTIMEO |
int |
发送超时。 |
SO_TYPE |
int |
套接字的类型。 |
IP_OPTIONS |
|
将IP标头的可选域名。 |
要求
Header: afxsock.h