CAsyncSocket::SetSockOpt

调用该成员函数的一组套接字选项。

BOOL SetSockOpt(
   int nOptionName,
   const void* lpOptionValue,
   int nOptionLen,
   int nLevel = SOL_SOCKET 
);

参数

  • nOptionName
    该值将设置的套接字选项。

  • lpOptionValue
    到该请求选项的值所提供的缓冲区的指针。

  • nOptionLen
    lpOptionValue 缓冲区的大小(以字节为单位)。

  • nLevel
    选项定义的级别;仅支持的秩是 SOL_SOCKETIPPROTO_TCP

返回值

非零,如果函数运行成功;否则0和特定错误代码可以通过调用 GetLastError检索。 下面的错误适用于此成员函数:

  • WSANOTINITIALISED 的成功的 AfxSocketInit 必须在使用此API之前发生。

  • WSAENETDOWN Windows套接字实现检测网络子系统失败。

  • WSAEFAULT   lpOptionValue 不对进程地址空间有效的部分。

  • 块Windows套接字操作的WSAEINPROGRESS 的进度中。

  • WSAEINVAL   nLevel 无效,或在 lpOptionValue 的信息无效。

  • WSAENETRESET 连接超时在 SO_KEEPALIVE 设置。

  • WSAENOPROTOOPT 选项卡未知或不支持的。 具体而言,而 SO_DONTLINGERSO_KEEPALIVESO_LINGERSO_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

请参见

参考

CAsyncSocket选件类

层次结构图

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl