gpt4 book ai didi

c++ - WSAPoll 更改 FDSET 中的数据并由于 WSAENOTSOCK 返回错误。我是否正确使用了 WSAPoll()?

转载 作者:搜寻专家 更新时间:2023-10-31 02:02:13 32 4
gpt4 key购买 nike

<分区>

以下是使用 WSAPoll 所需的最少代码,不包括初始化(socket()bind()listen() , accept() 等)或它之前的任何条件。您可以使用 sample server code来自文档,sock 将以 ClientSocket 为基础。

运行它,每行的值按如下方式变化:

// ...
// socket(), bind(), listen(), etc.
// sock = accept(...)
// See boilerplate linked.

SOCKET sock; // sock = 356
FDSET set; // Some garbled data, though should be same as below:
FD_ZERO(&set); // fd_count = 0, fd_array = [14757395258967641292, x64]
FD_SET(sock, &set); // fd_count = 1, fd_array = [356, 14757395258967641292 x63]
int iResult = WSAPoll(&set, 1, 1) // iResult = -1
// fd_count = 1, fd_array = [262500, 14757395258967641292 x63]
int errid = WSAGetLastError(); // errid = WSAENOTSOCK (10038)

// if (iResult > 0)
// recv(), etc.

如果我没看错的话,WSAPoll()应该模仿 poll() .因此,当我将 sock 存储到 set 中时,它会正确存储它,但是当它被传递到 WSAPoll() 中时,值会发生变化并且它返回 -1,errnoWSAENOTSOCK (10038)。

现在,这里的问题是 sock 是一个完全有效的文件描述符; socket 。 recv()send() 工作正常,没有任何错误。
另一方面,文件描述符 262500,没那么多。

我是在正确轮询还是在某种程度上没有正确转换它,因为它看起来不需要转换,因为 SOCKETfd_array 只是一个/unsigned __int64(s) 的单数/数组。

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com