Windows上的套接字创建(:: socket)失败 - 错误10038(WSAENOTSOCKET)

时间:2016-11-10 17:54:07

标签: sockets winapi winsock2

我们在某些系统上的Windows应用程序中看到了非常奇怪的行为。套接字创建突然开始失败,错误10038.在尝试使用Windows API分配套接字之前,会发生这种情况,然后才会发生任何连接:

s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == (SOCKET) -1) {
    // WSAGetLastError() returns 10038 here (WSANOTSOCKET)
}

有时使用此代码的程序可以正常运行数小时。发生此故障时,所有后续创建套接字的尝试都会失败并出现相同的错误。重新启动进程后,它将运行一次,然后再次失败。

这怎么可能?微软没有提到WSANOTSOCKET作为::socket失败的错误条件,它没有任何意义。

我尝试使用Process Explorer和Process Monitor检查正在运行的程序,但没有什么可以突出的。该进程没有太多句柄,系统上TCP连接的总数很少。 TCP堆栈中没有明显的第三方网络层,我们试图排除除IPv4以外的所有内容,但这并没有帮助。事件日志中没有任何内容,否则系统行为正常。

操作系统是Windows 8.1 Embedded。

0 个答案:

没有答案