【发布时间】:2014-07-17 07:43:34
【问题描述】:
虽然我知道 0 是 linux 中的有效文件描述符,并且可以通过调用 socket() 返回,但随后对 bind 或 setsockopt 的调用失败,错误代码为:88(非套接字操作)。 我也无法理解我可能在哪里关闭了我的标准输入文件描述符,以便将套接字值设为 0。 这是我的代码 sn-p.. 它是一个简单的套接字类..
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);
我用同样的方法写了很多socket程序,没有弄明白这个有什么问题。
【问题讨论】: