SOCKET sockId;
struct sockaddr_in servaddr; sockId = socket(AF_INET,SOCK_STREAM,0);
if(sockId == INVALID_SOCKET)
{
#ifdef _DEBUG
printf("socket error");
#endif
return false;
}
ZeroMemory(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(strListenIp.c_str());
servaddr.sin_port = htons(iListenPort);
#ifdef _DEBUG
printf("\nconnectip:%s connectPort:%d sockId:%d\n",strListenIp.c_str(),iListenPort,sockId);
#endif
if(connect(sockId,(struct sockaddr *)&servaddr, sizeof(servaddr)) != 0)
{
#ifdef _DEBUG
printf("\nconnect error");
printf("\nERROR is %d\n",WSAGetLastError());
#endif
closesocket(sockId);
return false;
}
WriteSocketSec(sockId,InObj);
closesocket(sockId);
return true; 程序需要不停的向服务程序侦听的同一端口发送数据,每次发送前都是重新起socket,发送WriteSocketSec()完后关闭socket(closesocket(sockId);).
在进行较多次后connect出问题,WSAGetLastError()出来的值是10048,即WSAEADDRINUSE,Address already in use。用netstat看,有很多端口没被释放,以前听高手说closesocket关闭端口有一定延时,怀疑是connect时又用了仍为释放完全的端口。
急等高手给出解决办法。
struct sockaddr_in servaddr; sockId = socket(AF_INET,SOCK_STREAM,0);
if(sockId == INVALID_SOCKET)
{
#ifdef _DEBUG
printf("socket error");
#endif
return false;
}
ZeroMemory(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(strListenIp.c_str());
servaddr.sin_port = htons(iListenPort);
#ifdef _DEBUG
printf("\nconnectip:%s connectPort:%d sockId:%d\n",strListenIp.c_str(),iListenPort,sockId);
#endif
if(connect(sockId,(struct sockaddr *)&servaddr, sizeof(servaddr)) != 0)
{
#ifdef _DEBUG
printf("\nconnect error");
printf("\nERROR is %d\n",WSAGetLastError());
#endif
closesocket(sockId);
return false;
}
WriteSocketSec(sockId,InObj);
closesocket(sockId);
return true; 程序需要不停的向服务程序侦听的同一端口发送数据,每次发送前都是重新起socket,发送WriteSocketSec()完后关闭socket(closesocket(sockId);).
在进行较多次后connect出问题,WSAGetLastError()出来的值是10048,即WSAEADDRINUSE,Address already in use。用netstat看,有很多端口没被释放,以前听高手说closesocket关闭端口有一定延时,怀疑是connect时又用了仍为释放完全的端口。
急等高手给出解决办法。
1、强行关闭,调用shutdown函数(在closesocket 前);
2、取消SO_LINGER设置,改为SO_DONTLINGER
会不会是这个原因造成的有些端口没有释放。听人说可以先在closesocket之前调用一下shutdown()函数来从容中断连接!
函数原型:
int shutdown(socket s,int how)
不知道是不是问题所在,共同进步!!!!
不过你的设计可能要改一改了。