简体   繁体   English

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

[英]Why socket(AF_INET, SOCK_STREAM, 0) return -1?


I'm writing a socket c++ lib for TCP. 我正在为 TCP 编写套接字 C++ 库。
I'm compiling with GCC for x86_64-w64-mingw32.7.3.0 on windows 10. 我正在 Windows 10 上为 x86_64-w64-mingw32.7.3.0 使用 GCC 进行编译。

When I try to build a socket I fail.当我尝试构建一个套接字时,我失败了。

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

Getting the error.得到错误。

ERROR: OPEN SOCKET-1错误:打开 SOCKET-1

Seem a really basic operation, I don't really understand why this failed.似乎是一个非常基本的操作,我真的不明白为什么会失败。 Unfortunately, I don't have other information to debug it further.不幸的是,我没有其他信息可以进一步调试它。

Do you have some suggestions?你有什么建议吗? Thank you in adavance.提前谢谢你。

If you write any socket based code in Windows , you need to start your application with WSAStartup() .如果您在Windows 中编写任何基于套接字的代码,则需要使用WSAStartup()启动您的应用程序。 Add it to your program if you have not.如果没有,请将其添加到您的程序中。 In addition, you need to finish your application with WSACleanup() .此外,您需要使用WSACleanup()完成您的应用程序。 These 2 functions are windows-specific.这两个函数是特定于 Windows 的。

Here is a small sample:这是一个小样本:

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

    //...
    
    WSACleanup();
}

Here is MSDN page for WSAStartuo() .这是WSAStartuo() MSDN页面。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM