C++设置TCP端口重用(SetSockOpt )
嵌入式之路 2012-11-13 11:38:14 #include "stdafx.h"
#include <WinSock2.h>
#include <Windows.h>
#include <vector>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#pragma comment(lib, "ws2_32.lib")
#define SERVPORT 7861 /*服务器监听端口号*/
#define HOLEPORT 4000
#define MAXDATASIZE 100
#define BACKLOG 10
using namespace std;
std::vector<SOCKET> client_fd;
char buf[MAXDATASIZE];
DWORD WINAPI qtPingServerThreadFunc(LPVOID lpThreadParameter);
DWORD WINAPI HoleCmThreadFunc(LPVOID lpThreadParameter);
typedef struct data_TCP{
int m_iID;
char m_szClienName[10];
int m_iMainCM;
int m_iHoleCM;
char m_szIP[16];
}client_data;
#define g_MAXBUF 10
client_data g_strClientData[g_MAXBUF];
int g_iClientNumber = 0;
typedef struct TCP_Skect
{
SOCKET m_Socket;
int m_i;
}TcpData;
int main(void)
{
SOCKET sockfd; /*sock_fd:监听socket;client_fd:数据传输socket */
struct sockaddr_in my_addr; /* 本机地址信息*/
struct sockaddr_in remote_addr; /* 客户端地址信息*/
char szMsg[]="hello";
WORD wVersionRequested;
WSADATA wsaData;
int err;
TcpData strSockData;
wVersionRequested = MAKEWORD(2,0);
err = WSAStartup(wVersionRequested,&wsaData);
if (0 != err)
{
cout<<"Socket failed";
return 0;
}
if (LOBYTE(wsaData.wVersion)!= 2 || HIBYTE(wsaData.wVersion) != 0)
{
WSACleanup();
return 0;
}
sockfd = ::socket(AF_INET,SOCK_STREAM,0);
if (INVALID_SOCKET == sockfd)
{
cout<<"Soket Create Failed";
return 0;
}
/*sockfd = socket(AF_INET, SOCK_STREAM, 0);*/
if (sockfd == -1)
{
perror( "socket创建出错!");
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset( &(my_addr.sin_zero),0,8);
if (bind(sockfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) == -1)
{
perror( "bind出错!");
exit(1);
}
strSockData.m_i = -1;
//设置端口 有误:error C2065: 'SetSockOpt' : undeclared identifier???????????????
int on = 1;
//setsockopt ( int sockfd, int level, int optname, const void * optval, socklen_t *opteln )
SetSockOpt((int)sockfd,SOL_SOCKET,SO_REUSEADDR,on,sizeof(on));
错误:\C++_exceise\Socket\sercise\2_service.cpp(93) : error C2065: 'SetSockOpt' : undeclared identifier