这个函数用来生成一个随机端口,可以生成一个没有被占用的端口。
//生成随机端口
DWORD GenerateRandomPort()
{
int nStartPort = 1000;
int nEndPort = 10000;
FD_SET fd_Write;
SOCKET s;
struct sockaddr_in server;
struct timeval tp = { 0 };
int ret = 0;
unsigned long mode = 1;
tp.tv_sec = 0;
tp.tv_usec = 50;
FD_ZERO(&fd_Write);
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
for(nStartPort; nStartPort != nEndPort; ++nStartPort)
{
s=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
FD_SET(s, &fd_Write);
ioctlsocket(s, FIONBIO, &mode);
server.sin_port=htons(nStartPort);
connect(s,(struct sockaddr *)&server,sizeof(server));
ret=select(0, NULL, &fd_Write, NULL, &tp);
if(0 == ret || -1 == ret)
{
closesocket(s);
WSACleanup();
return nStartPort;
}
closesocket(s);
}
WSACleanup();
return nStartPort;
}