如果非超级用户,Win Socket 创建失败,错误代码为 10022
Win Socket Creation fails with Error code 10022 if non super user
我在 windows 7 上遇到了一个非常奇怪的 winsockets 行为。两个库(Wt http://www.webtoolkit.eu/ libwebsocket https://libwebsockets.org/)以及我自己的示例代码得到了错误代码 10022(无效参数。)当 运行 作为普通用户时,当 运行 作为超级用户时从不。 lib 项目的开发人员和我都找不到原因。恐怕这在我们公司是一个非常隐蔽的白痴群规。
触发示例代码:
#include <cstdlib>
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <iostream>
#include <exception>
#include <stdexcept>
int main(int argc, char** argv) {
WSADATA sinfo;
int sr = WSAStartup(MAKEWORD(2, 2),&sinfo);
if (sr != 0)
{
std::cout << sr << std::endl;
throw std::runtime_error("WSAStartup");
}
SOCKET listenSocket = socket(PF_INET, SOCK_STREAM, 0);
if (listenSocket == INVALID_SOCKET)
{
std::cout << "Failed with "<< WSAGetLastError() << " " << GetLastError()<< std::endl;
throw std::runtime_error("Socket");
}
WSACleanup();
std::cout << "Finished" << std::endl;
return 0;
}
输出是:“Failed with 10022 10022”(当然 runtime_error 导致终止)。
最后我明白了原因:如果二进制文件被放置在例如从网络执行 share/volume.
Microsoft 已发现问题并提供修补程序:https://support.microsoft.com/en-us/kb/2649107
我在 windows 7 上遇到了一个非常奇怪的 winsockets 行为。两个库(Wt http://www.webtoolkit.eu/ libwebsocket https://libwebsockets.org/)以及我自己的示例代码得到了错误代码 10022(无效参数。)当 运行 作为普通用户时,当 运行 作为超级用户时从不。 lib 项目的开发人员和我都找不到原因。恐怕这在我们公司是一个非常隐蔽的白痴群规。
触发示例代码:
#include <cstdlib>
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <iostream>
#include <exception>
#include <stdexcept>
int main(int argc, char** argv) {
WSADATA sinfo;
int sr = WSAStartup(MAKEWORD(2, 2),&sinfo);
if (sr != 0)
{
std::cout << sr << std::endl;
throw std::runtime_error("WSAStartup");
}
SOCKET listenSocket = socket(PF_INET, SOCK_STREAM, 0);
if (listenSocket == INVALID_SOCKET)
{
std::cout << "Failed with "<< WSAGetLastError() << " " << GetLastError()<< std::endl;
throw std::runtime_error("Socket");
}
WSACleanup();
std::cout << "Finished" << std::endl;
return 0;
}
输出是:“Failed with 10022 10022”(当然 runtime_error 导致终止)。
最后我明白了原因:如果二进制文件被放置在例如从网络执行 share/volume.
Microsoft 已发现问题并提供修补程序:https://support.microsoft.com/en-us/kb/2649107