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
...全文
628 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
嵌入式之路 2012-11-13
  • 打赏
  • 举报
回复
int val = TRUE; //SO_REUSEADDR选项就是可以实现端口重绑定的 if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val))!=0) { printf("error!setsockopt failed!\n"); return -1; }

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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