gpt4 book ai didi

c++ - (linux)Socket 返回 0

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:18 25 4
gpt4 key购买 nike

虽然我知道 0 是 linux 中的有效文件描述符并且可以通过调用 socket() 返回,但随后调用 bind 或 setsockopt 失败,错误代码:88(非套接字操作)。此外,我无法理解我可能在哪里关闭了我的标准输入文件描述符,以便将套接字值设置为 0。这是我的代码片段。它是一个简单的套接字类。

bool serverHandler::startServer(string strAddress,int port)
{
//memset(&m_srvAddr,'\0',sizeof(m_srvAddr));
m_srvSock = -1;
if(m_srvSock = socket(AF_INET,SOCK_STREAM,0) < 0)
cout<<"serverHandler: Failed to create server socket."<<endl;
m_srvAddr.sin_family = AF_INET;
m_srvAddr.sin_addr.s_addr = inet_addr(strAddress.c_str());
m_srvAddr.sin_port = htons(port);
cout<<"Socket value:"<<m_srvSock<<" for "<<strAddress<<" "<<port<<endl;
if (bind(m_srvSock,(struct sockaddr *) &m_srvAddr,sizeof(m_srvAddr)) < 0)
{
cout<<"Failed with errno:"<<errno<<endl;
return false;
}
if (listen(m_srvSock, MAX_PENDING) < 0)
{
return false;
}
}

这个函数的调用很简单:

srvHandler.startServer("127.0.0.1",7878);

我用同样的方法写下了很多套接字程序,没有搞清楚这个有什么问题。

最佳答案

if(m_srvSock = socket(AF_INET,SOCK_STREAM,0) < 0)

不正确,因为 <= 之前被评估(优先级较低),需要加括号:

if((m_srvSock = socket(AF_INET,SOCK_STREAM,0)) < 0)

如果你使用 GCC,你应该设置 -W -Wall获得 warning 的选项对于此类错误,MVSC 至少使用 /W4 .

关于c++ - (linux)Socket 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23905609/

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