为什么socket(AF_INET, SOCK_STREAM, 0)返回-1?



我正在为TCP编写套接字c++库。

我在windows 10上用GCC编译x86_64-w64-mingw32.7.3.0。当我尝试建立一个套接字时,我失败了。

listenSocket = socket(AF_INET, SOCK_STREAM, 0);
if (listenSocket < 0) {
std::cout << "ERROR: OPEN SOCKET" << listenSocket << std::endl;
close(listenSocket);
return;
}

得到错误。

ERROR: OPEN SOCKET-1

似乎是一个非常基本的操作,我真的不明白为什么失败了。不幸的是,我没有其他信息来进一步调试它。

你有什么建议吗?提前谢谢你。

如果您在Windows中编写任何基于套接字的代码,您需要使用WSAStartup()启动应用程序。如果没有,请将其添加到程序中。此外,您需要使用WSACleanup()完成您的应用程序。这两个函数是windows特有的。

下面是一个小示例:

int main() {
WSADATA wsaData;
int err = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (err != 0)
return 1;
//...

WSACleanup();
}

这是WSAStartuo()的MSDN页面。

相关内容

最新更新