PFN_WSK_CONNECT_EX回调函数 (wsk.h)

WskConnectEx 函数将面向连接或流套接字连接到远程传输地址。

WskConnectEx 类似于 WskConnect,不同之处在于它还可以选择在连接同步期间或之后发送数据缓冲区。

语法

PFN_WSK_CONNECT_EX PfnWskConnectEx;

NTSTATUS PfnWskConnectEx(
  [in]           PWSK_SOCKET Socket,
  [in]           PSOCKADDR RemoteAddress,
  [in, optional] PWSK_BUF Buffer,
                 ULONG Flags,
  [in, out]      PIRP Irp
)
{...}

参数

[in] Socket

指向 WSK_SOCKET 结构的指针,该结构指定连接到远程传输地址的套接字的套接字对象。

[in] RemoteAddress

指向一个结构的指针,该结构指定要连接到套接字的远程传输地址。 此指针必须是指向特定 SOCKADDR 结构类型的指针,该类型对应于创建套接字时指定的 WSK 应用程序的地址系列。

[in, optional] Buffer

指向 WSK_BUF 结构的指针,其中包含在连接同步期间或之后要发送的数据。 允许的最大大小(以字节为单位)为 65,535。

Flags

此参数保留供系统使用。 WSK 应用程序必须将此参数设置为零。

[in, out] Irp

指向 WSK 子系统用于异步完成连接作的调用方分配的 IRP 的指针。 有关将 IRP 与 WSK 函数配合使用的详细信息,请参阅 将 IRP 与 Winsock 内核函数配合使用

返回值

WskConnectEx 返回以下 NTSTATUS 代码之一:

返回代码 描述
STATUS_SUCCESS
套接字已成功连接到远程传输地址。 IRP 将以成功状态完成。
STATUS_PENDING
WSK 子系统无法立即连接套接字。 将套接字连接到远程传输地址后,WSK 子系统将完成 IRP。 连接作的状态将在 IRP 的 IoStatus.Status 字段中返回。
STATUS_FILE_FORCED_CLOSED
套接字不再正常工作。 IRP 将以失败状态完成。 WSK 应用程序必须调用 WskCloseSocket 函数才能尽快关闭套接字。
STATUS_INVALID_PARAMETER
WSK 应用程序尝试将标志传递到 Flags 参数(由于当前未为 WskConnectEx定义有效标志,因此不允许这样做)。
STATUS_BUFFER_OVERFLOW
WSK 应用程序尝试将大于 65,535 字节的缓冲区传递到 Buffer 参数。
其他状态代码
发生错误。 IRP 将以失败状态完成。

言论

WSK 应用程序可以通过调用 WskSocketConnect 函数(而不是调用 WskSocket 函数、WskBind 函数,然后调用 WskConnectEx 函数)在单个函数调用中创建、绑定和连接导向套接字。 建议调用 WskSocketConnect 函数,除非 WSK 应用程序需要在绑定或连接套接字之前设置套接字选项或发出 I/O 控制作。

WSK 应用程序只能通过调用 WskBind 函数,在应用程序以前绑定到本地传输地址的连接套接字或流套接字上调用 WskConnectEx 函数。

对于流套接字,WskConnectEx 成功在流套接字上调用后,该套接字将提交到面向连接的流,并且不再调用侦听套接字函数。

如果使用 Buffer 参数,调用方可以在连接请求完成后立即在其 WSK_BUF 结构中释放 MDL。

在使用提供的发送缓冲区调用 WskConnectEx 之前,如果 WSK 应用程序通过 WskControlSocket 函数在 WSK 套接字上设置 TCP_FASTOPEN 选项,则系统可以选择在 SYN 数据包中发送部分或所有数据。 有关详细信息,请参阅 IPPROTO_TCP 套接字选项中的 TCP Fastopen 选项。

要求

要求 价值
最低支持的客户端 Windows 10 版本 1703
目标平台 普遍
标头 wsk.h (包括 Wsk.h)
IRQL <= DISPATCH_LEVEL

另请参阅

SOCKADDR

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskBind

WskCloseSocket

WskControlSocket

WskDisconnect

WskDisconnectEvent

WskSocket

WskSocketConnect