accept的时候,加上地址获取总是失败是什么原因?

liounzhou 2005-07-28 04:57:29
源代码如下:
int iSize = 0;
SOCKET Client;
SOCKADDR_IN ClientAddr;
memset(&ClientAddr,0,sizeof(SOCKADDR_IN));

//创建SOCKET
m_ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_ListenSocket==INVALID_SOCKET)
{
LogInfo("创建监听SOCKET失败!");
return -1;
}
else{
LogInfo("创建监听SOCKET成功!");
}

SOCKADDR_IN addrSock;
addrSock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSock.sin_family = AF_INET;
addrSock.sin_port = htons(9110);
if(SOCKET_ERROR==bind(m_ListenSocket, (SOCKADDR*)&addrSock, sizeof(SOCKADDR)))
{
LogInfo("监听端口绑定失败!");
return -1;
}

/*unsigned long cmd = 1;
int nStatus=ioctlsocket(m_ListenSocket, FIONBIO, &cmd);*/

// 相关初始化处理, 创建监听套接字
listen(m_ListenSocket, 5);

while(1)
{
//下面这一句出错
Client = accept(m_ListenSocket, (SOCKADDR*)&ClientAddr, &iSize);
//Client = accept(m_ListenSocket, NULL, NULL); //换成这一句就不出错
if(Client == INVALID_SOCKET)
{
int r = WSAGetLastError();

return -1;
}

CreateThread(NULL, NULL, Thread_RecvData, (LPVOID)Client, 0, NULL);
}
...全文
126 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liounzhou 2005-07-28
  • 打赏
  • 举报
回复
果然OK了。谢谢lifengice0706(无) 。

本来查MSDN上accept的帮助,最后两个参数是out的,以为不需要赋值。看来是我理解有误
lifengice0706 2005-07-28
  • 打赏
  • 举报
回复
在 listen(m_ListenSocket, 5); 后加
iSize = sizeof(struct sockaddr_in);
就ok了,刚才没注意。
mango279 2005-07-28
  • 打赏
  • 举报
回复
iSize==0
lifengice0706 2005-07-28
  • 打赏
  • 举报
回复
帮你up,我去用你的代码试试,一会儿给你结果。
liounzhou 2005-07-28
  • 打赏
  • 举报
回复
为什么我的就出错?报错信息是:WSAEFAULT.
lifengice0706 2005-07-28
  • 打赏
  • 举报
回复
看不出有什么问题阿,我试了一下,是ok的!只是无法得到remote的信息而已。以下转自msdn:

The accept function is used with connection-oriented socket types such as SOCK_STREAM. If addr and/or addrlen are equal to NULL, then no information about the remote address of the accepted socket is returned.

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧