Socket为什么会不停地Accept?

「已注销」 2004-04-26 10:28:27
大家帮忙看看这段代码:
放在主线程中没什么问题,但是如果放在子线程中就会不停地Accept错误(就是在最后几行那里不停地continue)

WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0)
{
Application->MessageBoxA("Socket 初始化失败!","错误",MB_ICONERROR+MB_OK);
ExitProcess(0);
}

sockaddr_in addr;
int port=2121;
int SockErr;
sckServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
addr.sin_family=AF_INET;
addr.sin_port=htons(port);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
//addr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sckServer,(SOCKADDR*)&addr,sizeof(addr))==SOCKET_ERROR)
{
Application->MessageBoxA("Socket 初始化失败!","错误",MB_ICONERROR+MB_OK);
ExitProcess(0);
}
if(listen(sckServer,50)==SOCKET_ERROR)
{
Application->MessageBoxA("Socket 初始化失败!","错误",MB_ICONERROR+MB_OK);
ExitProcess(0);
}

while(true)
{
SOCKET sckConn;
sockaddr saConn;
int iAddrLen;
bool bAccept=false;
if((sckConn=accept(sckServer,&saConn,&iAddrLen))==INVALID_SOCKET)
{
continue;
}
..........
}
...全文
92 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sailormansoft 2010-06-24
学习了~~~~~
回复
「已注销」 2004-05-08
行了,就是int iAddrLen = sizeof(sockaddr)

谢谢各位了!

但是为什么放在主线程中不会出现这种情况呢?
回复
ToIP 2004-04-30
int iAddrLen = sizeof(sockaddr)

正解
回复
rd73 2004-04-30
你把int iAddrLen = sizeof(sockaddr)试试,我也是这样写的,但是很正常啊.
线程的操作方法一样,accept有点不同,我的如下:

bool TSocket::Accept(TSocket * pSocket)
{
int newsock;
sockaddr_in addr;
int size;

if(sock < 0)
return false;

if(pSocket == 0)
return false;

size = sizeof(addr);
memset(&addr, 0, size);
newsock = accept(sock, (sockaddr *)&addr, &size);
if(newsock > 0)
{
pSocket->Attach(newsock);
return true;
}
else
return false;
}
回复
ToIP 2004-04-27
对了,你处理完之后应该,调用shutdown();函数来关闭连接,或者disconnect();
否则会出问题的
回复
ToIP 2004-04-27
1)WSAGetLastError(),看错误原因
2)单步调试,找出准确原因,如果还是不行,再法帖问
回复
l_clove 2004-04-27
sckConn=accept(sckServer,&saConn,&iAddrLen))==INVALID_SOCKET ?
用ShowMessage(SysErrorMessage(WSAGetLastError());看一下是什么错误
if((sckConn=accept(sckServer,&saConn,&iAddrLen))==INVALID_SOCKET)
{
ShowMessage(SysErrorMessage(WSAGetLastError());
}
回复
newcoco800927 2004-04-27
同意楼上的
回复
「已注销」 2004-04-26
高手呢?
回复
「已注销」 2004-04-26
怎么没人回答呀
都不知道吗?
回复
相关推荐
发帖
网络及通讯开发
创建于2007-08-02

1299

社区成员

C++ Builder 网络及通讯开发
申请成为版主
帖子事件
创建了帖子
2004-04-26 10:28
社区公告
暂无公告