vc socket connect 报10048错误

wxliangzyt 2012-11-23 03:36:10


SOCKET COsvicedApp::Connect_Server(char* &return_char)
{
SOCKET s;
WORD wVersionRequested;
WSADATA wsa;
wVersionRequested = MAKEWORD( 2, 2 );
int res = WSAStartup(wVersionRequested,&wsa);
if(res == -1)
{
return_char="1001";
return s;
}

struct sockaddr_in socket_in;
s = WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,0);
if(s == INVALID_SOCKET)
{
DWORD sd=GetLastError();
CString cc;
cc.Format("wsa:%d",sd);
return_char=cc.GetBuffer(cc.GetLength());//="1002";
return s;
}

socket_in.sin_family = AF_INET;
socket_in.sin_port = htons(5555);
socket_in.sin_addr.S_un.S_addr = inet_addr(cs_serip);

int con_res=0;
int iiercut=0;
line1:
con_res = connect(s,(struct sockaddr*)&socket_in,sizeof(socket_in));
if(con_res == SOCKET_ERROR)
{
CString ccc;
DWORD ldrerrid=GetLastError();
if (ldrerrid==10048)
{
Sleep(1000);
iiercut++;
if (iiercut>3)
{
}
else
{
goto line1;
}

}
ccc.Format("con[%d]:%d",iiercut,ldrerrid);
return_char=ccc.GetBuffer(ccc.GetLength());//="1002";
closesocket(s);
WSACleanup();
return s;
}
else
{
return_char="0000";
return s;
}
}



这些代码,是在一个DLL里面的,当我for几千次调用这个DLL时,connect会报错:10048,求高人解决这个问题
...全文
367 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xumaojun 2012-11-23
  • 打赏
  • 举报
回复
Address already in use. Typically, only one usage of each socket address (protocol/IP address/port) is permitted. This error occurs if an application attempts to bind a socket to an IP address/port that has already been used for an existing socket, or a socket that wasn't closed properly, or one that is still in the process of closing. For server applications that need to bind multiple sockets to the same port number, consider using setsockopt(SO_REUSEADDR). Client applications usually need not call bind at all—connect chooses an unused port automatically. When bind is called with a wildcard address (involving ADDR_ANY), a WSAEADDRINUSE error could be delayed until the specific address is committed. This could happen with a call to another function later, including connect, listen, WSAConnect, or WSAJoinLeaf. 建议socket套接字设置可重用属性:setsockopt(SO_REUSEADDR)
xumaojun 2012-11-23
  • 打赏
  • 举报
回复
only one usage of each socket address is normally permitted.WSAEADDRINUSE
wxliangzyt 2012-11-23
  • 打赏
  • 举报
回复
struct linger linger = { 0 }; linger.l_onoff = 1; linger.l_linger = 30; if( setsockopt(s,SOL_SOCKET, SO_REUSEADDR,(char*)&linger, sizeof(linger)) == -1 ) { return_char="setcokopt:-1"; closesocket(s); WSACleanup(); return s; } 就算我试为linger.l_onoff = 0,情况还是一样,0,1我都试过
oyljerry 2012-11-23
  • 打赏
  • 举报
回复
〖10048〗-通常每个套接字地址 (协议/网络地址/端口)只允许使用一次。
YunXia98Li 2012-11-23
  • 打赏
  • 举报
回复
是TCP连接处于TIME_WAIT状态,地址没释放。记得应该设置linger选项(onoff=1, linger=0),可以在网上查一下或找《WinSock网络编程经络》里有说明。

18,356

社区成员

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

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