亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? netsocket.cpp

?? 利用HyfaFax傳真的傳輸協議(與FTP協議相似),編寫發送傳真到目的傳真服務器的客戶代碼!
?? CPP
字號:
#include "NetSocket.h"

#ifdef WIN32
	#pragma comment(lib, "Ws2_32.lib")
#endif
int NetSocket::m_nCount = 0;


NetSocket::NetSocket()
:m_bNonBlocking(false)
{
	Reset();

}

NetSocket::~NetSocket()
{

	Close();
}

bool NetSocket::_NetStartUp(int VersionHigh,int VersionLow)
{
#ifdef WIN32
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
 
	wVersionRequested = MAKEWORD(VersionHigh,VersionLow);
    err=WSAStartup(wVersionRequested, &wsaData);
	
	/* startup failed */
	if (err!=0)									
	{
		Sys_Log("WSAStartup Error");
		WSACleanup();
		return false;
	}

	/* version error */
	if (LOBYTE(wsaData.wVersion)!= VersionLow ||
        HIBYTE(wsaData.wVersion)!= VersionHigh ) 
	{
		Sys_Log("WSAStartup Version Error");
		WSACleanup();
		return false;
	}
	Sys_Log("WSAStartup OK");
#endif
	return true;
}

bool NetSocket::_NetCleanUp()
{
#ifdef WIN32	
	WSACleanup();
#endif
	return true;
}

bool NetSocket::Initialize(int protocol)
{
	if (m_nCount++==0)
		if (!_NetStartUp(1,1)) return false;

	if (protocol==PROTOCOL_UDP)
	{
		m_socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
	}
	else 
	{
		m_socket=socket(AF_INET,SOCK_STREAM,0);//IPPROTO_TCP
	}

	if(m_socket==INVALID_SOCKET) 
	{
		return false;
	}
//	SetNonBlocking();
	return true;
}

bool NetSocket::BindAddr(char *ip,int port)
{
	SOCKADDR_IN addrLocal;
	addrLocal.sin_family=AF_INET;
	addrLocal.sin_port=htons(port);
	if(ip)
	{
		addrLocal.sin_addr.s_addr=inet_addr(ip);
	}
	else
	{
		addrLocal.sin_addr.s_addr=htonl(INADDR_ANY);
	}
	if(bind(m_socket,(SOCKADDR *)&addrLocal,sizeof(addrLocal))==SOCKET_ERROR)
	{
		Sys_Log("bind socket error");
		return false;
	}
	return true;
}

bool NetSocket::Listen()
{
	if(listen(m_socket,SOMAXCONN)==SOCKET_ERROR)
	{
		Sys_Log("NetSocket:listen error");
		return false;
	}
	return true;
}

bool NetSocket::Connect(char *szAddr, int port, unsigned long ip){
	SOCKADDR_IN addrRemote;
	hostent *host=NULL;

	memset(&addrRemote,0,sizeof(addrRemote));
	addrRemote.sin_family=AF_INET;
	addrRemote.sin_port=htons(port);
	
	if(szAddr)
		addrRemote.sin_addr.s_addr = inet_addr(szAddr);
	else
		addrRemote.sin_addr.s_addr = ip;
	
	if(addrRemote.sin_addr.s_addr==INADDR_NONE)
	{
		if(!szAddr) return false;
		host=gethostbyname(szAddr);
		if(!host) return false;
		memcpy(&addrRemote.sin_addr,host->h_addr_list[0],host->h_length);
	}
	
	if(connect(m_socket,(SOCKADDR *)&addrRemote,sizeof(addrRemote))
		==SOCKET_ERROR)
	{
		int err = GETERROR;
		if (err != CONN_INPRROGRESS)
		{
			Sys_Log("socket connect error = %d",err); 
			return false;
		}
	}
	return true;
}

/*
 * return value 
 * =  0 send failed
 * >  0	bytes send
 * = -1 net dead
 */
int NetSocket::Send(char *buf, int len)
{
	if (!CanWrite()) return 0;
	
	int ret;
	/*
	in linux be careful of SIGPIPE
	*/
	ret = send(m_socket,buf,len,0);
	if (ret==SOCKET_ERROR)
	{
		int err=GETERROR;
		if (err==WSAEWOULDBLOCK) return 0;
		return -1;
	}
	return ret;
}

/*
 * return value 
 * =  0 recv failed
 * >  0	bytes recv
 * = -1 net dead
 */
int NetSocket::Recv(char *buf, int len)
{
	if (CanRead()==false) 
		return 0;

	int ret;
	/* in linux be careful of SIGPIPE */
	ret = recv(m_socket,buf,len,0);
	
	if (ret==0)
	{
		/* remote closed */
		return -1;
	}

	if (ret==SOCKET_ERROR)
	{
		int err=GETERROR;
		if (err!=WSAEWOULDBLOCK)
		{
			return -1;
		}
	}
	return ret;
}

bool NetSocket::CanRead()
{
	if(!m_bNonBlocking)
		return true;
	fd_set readfds;
	timeval timeout;

	timeout.tv_sec=0;
	timeout.tv_usec=0;
	FD_ZERO(&readfds);
	FD_SET(m_socket,&readfds);
	int ret = select(FD_SETSIZE,&readfds,NULL,NULL,&timeout);
	if(ret > 0 && FD_ISSET(m_socket,&readfds))
		return true;
	else 
		return false;
}

bool NetSocket::CanWrite()
{
	if(!m_bNonBlocking)
		return true;
	fd_set writefds;
	timeval timeout;

	timeout.tv_sec=0;
	timeout.tv_usec=0;
	FD_ZERO(&writefds);
	FD_SET(m_socket,&writefds);
	int ret = select(FD_SETSIZE,NULL,&writefds,NULL,&timeout);
	if(ret > 0 && FD_ISSET(m_socket,&writefds))
		return true;
	else 
		return false;
}

bool NetSocket::Close()
{
	if (m_socket == INVALID_SOCKET) return false;
	CLOSESOCKET(m_socket);
	Reset();
	if (--m_nCount == 0)
		_NetCleanUp();
	return true;
}

SOCKET NetSocket::Accept()
{
	SOCKADDR_IN addr;
	int len = sizeof(addr);
	SOCKET tmp;
	tmp = accept(m_socket,(SOCKADDR *)&addr,(socklen_t *)&len);
	if (tmp == INVALID_SOCKET || tmp == 0)
	{
		Sys_Log("accept error");
		return INVALID_SOCKET;
	}
	m_nCount++;
	return tmp;	
}

bool NetSocket::Attach(SOCKET socket)
{
	m_socket = socket;
//	SetNonBlocking();
	return true;
}

int NetSocket::SendTo(char *buf, int len, SOCKADDR_IN *addr)
{
	if (!CanWrite()) return 0;
	
	int ret;
	ret = sendto(m_socket,buf,len,0,(SOCKADDR *)addr,sizeof(SOCKADDR_IN));
	if (ret==SOCKET_ERROR)
	{
		int err=GETERROR;
		if (err!=WSAEWOULDBLOCK)
		{
			return -1;
		}
	}
	return ret;
}

int NetSocket::RecvFrom(char *buf, int len, SOCKADDR_IN *addr ,int *addrlen)
{
	if (!CanRead()) return 0;

	int ret;
	ret = recvfrom(m_socket,buf,len,0,(SOCKADDR *)addr,(socklen_t *)addrlen);
	if (ret==SOCKET_ERROR)
	{
		int err=GETERROR;
		if (err!=WSAEWOULDBLOCK)
		{
			return -1;
		}
	}
	return ret;
}

bool NetSocket::HasExcept()
{
	fd_set exceptfds;
	timeval timeout;

	timeout.tv_sec=0;
	timeout.tv_usec=0;
	FD_ZERO(&exceptfds);
	FD_SET(m_socket,&exceptfds);
	int ret = select(FD_SETSIZE,NULL,NULL,&exceptfds,&timeout);
	if(ret > 0 && FD_ISSET(m_socket,&exceptfds))
		return true;
	else 
		return false;
}

void NetSocket::Reset()
{
	m_socket = INVALID_SOCKET;
}
bool NetSocket::SetAsync()
{

	u_long arg;

	arg = 1;	

	if (IOCTLSOCKET(m_socket,FIOASYNC,&arg)==SOCKET_ERROR)

	{

		return false;

	}

	else

	{

		m_bNonBlocking = false;

		return true;

	}
	
}
bool NetSocket::SetNonBlocking()
{
	/* set to nonblocking mode */
	u_long arg;
	arg = 1;
	
	if (IOCTLSOCKET(m_socket,FIONBIO,&arg)==SOCKET_ERROR)

	{

		return false;

	}
	else
	{
		m_bNonBlocking = true;
		return true;
	}
}

bool NetSocket::SetSendBufferSize(int len)
{
	int ret;
	ret = setsockopt(m_socket,SOL_SOCKET,SO_SNDBUF,(char *)&len,sizeof(len));
	if (ret == SOCKET_ERROR) return false;
	return true;
}

bool NetSocket::SetRecvBufferSize(int len)
{
	int ret;
	ret = setsockopt(m_socket,SOL_SOCKET,SO_RCVBUF,(char *)&len,sizeof(len));
	if (ret == SOCKET_ERROR) return false;
	return true;
}

/* 
 * get local address 
 */
bool NetSocket::GetLocalAddr(char *addr, short *port, unsigned long *ip)
{
	SOCKADDR_IN addrLocal;
	socklen_t len = sizeof(addrLocal);
	if(getsockname(m_socket,(SOCKADDR*)&addrLocal,&len)==SOCKET_ERROR)
		return false;
	
	char *tmp = inet_ntoa(addrLocal.sin_addr);
	if(!tmp) 
		return false;
	if(addr) 
		strcpy(addr,tmp);
	if(port)
		*port = ntohs(addrLocal.sin_port);
	if(ip) 
		*ip = addrLocal.sin_addr.s_addr;
	return true;
}

/* 
 * get remote address 
 */
bool NetSocket::GetRemoteAddr(char *addr, short *port,unsigned long *ip)
{
	sockaddr_in addrRemote;
	int len = sizeof(addrRemote);
	if(getpeername(m_socket,(sockaddr *)&addrRemote,(socklen_t *)&len)==SOCKET_ERROR)
		return false;
	
	char *tmp = inet_ntoa(addrRemote.sin_addr);
	if(!tmp) 
		return false;
	if(addr)
		strcpy(addr,tmp);
	if(port)
		*port = ntohs(addrRemote.sin_port);
	if(ip)
		*ip = addrRemote.sin_addr.s_addr; 
	return true;
}

bool NetSocket::SetReuseAddr(bool reuse)
{
#ifndef WIN32
	/* only useful in linux */
	int opt = 0;
	unsigned int len = sizeof(opt);

	if(reuse) opt = 1;
	if(setsockopt(m_socket,SOL_SOCKET,SO_REUSEADDR,
		(const void*)&opt,len)==SOCKET_ERROR)
	{
		return false;
	}
	else
	{
		return true;
	}
#endif
	return true;
}
unsigned long NetSocket::GetMaxCanReadSize()
{
	unsigned long Argument = 0;
	IOCTLSOCKET(m_socket, FIONREAD, &Argument);
	return Argument;
}

SOCKET NetSocket::FromHandle()
{

	return m_socket;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产免费一区二区 | 欧美性感一区二区三区| 一区二区三区四区精品在线视频| 色菇凉天天综合网| 午夜久久久久久| 精品国偷自产国产一区| 成人久久视频在线观看| 亚洲自拍偷拍网站| 91精品国产综合久久久蜜臀粉嫩 | 色一区在线观看| 亚洲成人精品影院| 精品欧美一区二区三区精品久久| 国产激情偷乱视频一区二区三区| 亚洲欧美国产77777| 91精品国产综合久久小美女| 国产精品一二三在| 亚洲综合图片区| 日韩欧美国产综合| www.99精品| 日韩精品色哟哟| 国产欧美一区二区三区在线看蜜臀| 91视频91自| 美女视频网站久久| 亚洲婷婷综合久久一本伊一区| 欧美日本免费一区二区三区| 国产一区二区在线影院| 亚洲麻豆国产自偷在线| 欧美mv日韩mv| 91视频在线看| 韩国欧美国产1区| 亚洲欧美日韩电影| 精品国产一区二区三区不卡 | 精品伦理精品一区| yourporn久久国产精品| 天天影视网天天综合色在线播放| 国产亚洲视频系列| 欧美日韩一区三区四区| 国产精选一区二区三区| 亚洲第一成人在线| 国产女主播在线一区二区| 欧美午夜免费电影| 高清不卡一二三区| 肉丝袜脚交视频一区二区| 欧美国产一区二区| 欧美一区二区视频在线观看2022 | 国产亚洲污的网站| 欧美精品成人一区二区三区四区| 粉嫩av一区二区三区| 丝袜a∨在线一区二区三区不卡| 日本一区二区视频在线| 欧美一区二区三区色| 91亚洲永久精品| 国产一区二区三区香蕉| 亚洲国产精品一区二区www在线 | 9i看片成人免费高清| 免费成人在线视频观看| 亚洲自拍偷拍九九九| 欧美经典一区二区| 欧美成人video| 欧美日韩黄色一区二区| 成人激情黄色小说| 极品尤物av久久免费看| 亚洲成人手机在线| 亚洲蜜臀av乱码久久精品| 国产午夜精品久久久久久免费视| 91精品国产91综合久久蜜臀| 91国产免费观看| 成人18精品视频| 国产在线观看一区二区| 日韩高清欧美激情| 一区二区在线观看视频| 国产精品美女久久久久久2018| 日韩免费高清视频| 欧美卡1卡2卡| 在线看不卡av| 91亚洲国产成人精品一区二区三| 国产福利一区在线| 蓝色福利精品导航| 日韩专区在线视频| 亚洲图片有声小说| 亚洲精品免费在线观看| 成人欧美一区二区三区白人| 国产农村妇女毛片精品久久麻豆 | 亚洲一区在线观看免费| 日韩毛片一二三区| 国产精品久久久久影院亚瑟 | 日韩欧美国产麻豆| 在线电影欧美成精品| 欧美日韩性生活| 欧美性猛交xxxxxxxx| 欧美主播一区二区三区| 91视频xxxx| 色88888久久久久久影院野外| thepron国产精品| jlzzjlzz欧美大全| 成人91在线观看| 99国产精品久久久久久久久久| 国产乱子伦视频一区二区三区| 老色鬼精品视频在线观看播放| 美女一区二区三区| 久久国产尿小便嘘嘘| 精品综合久久久久久8888| 麻豆精品在线播放| 经典三级视频一区| 国产精品综合视频| 丁香另类激情小说| 成人激情开心网| 91丨porny丨首页| 欧美一a一片一级一片| 欧美三级电影在线观看| 欧美性猛交xxxx黑人交| 欧美午夜免费电影| 制服丝袜中文字幕亚洲| 欧美大肚乱孕交hd孕妇| 精品成人a区在线观看| 国产亚洲午夜高清国产拍精品| 国产欧美一区二区精品性| 中文字幕av一区 二区| 中文字幕一区二| 亚洲免费观看高清完整版在线 | 国产精品久久久久aaaa| 国产精品久久久99| 亚洲少妇30p| 亚洲一卡二卡三卡四卡五卡| 午夜精品久久久久久久久久久| 日一区二区三区| 激情久久久久久久久久久久久久久久| 激情成人综合网| 成人黄色av网站在线| 91搞黄在线观看| 91精品国模一区二区三区| 久久亚洲春色中文字幕久久久| 国产欧美日韩在线| 一区二区三区在线高清| 日韩精品一级中文字幕精品视频免费观看 | 精品日韩欧美一区二区| 久久九九影视网| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩欧美在线1卡| 国产日产欧产精品推荐色 | 97精品电影院| 精品视频1区2区| 欧美电视剧在线观看完整版| 亚洲国产精品传媒在线观看| 亚洲日本韩国一区| 免费观看日韩av| 成人18视频在线播放| 欧美日韩国产首页在线观看| 精品精品欲导航| ...xxx性欧美| 日本欧美一区二区三区乱码| 国产成人免费网站| 色噜噜狠狠一区二区三区果冻| 在线播放日韩导航| 中文字幕免费不卡在线| 亚洲一区中文在线| 国产一区二区剧情av在线| 91成人国产精品| 精品剧情在线观看| 日韩毛片一二三区| 麻豆精品在线看| 91网站黄www| 欧美zozo另类异族| 亚洲欧美激情一区二区| 精品一区二区三区免费| 91精彩视频在线观看| www激情久久| 亚洲自拍偷拍图区| 国产xxx精品视频大全| 欧美日韩aaa| 国产精品美女一区二区三区 | 欧美自拍偷拍一区| 久久婷婷成人综合色| 亚洲线精品一区二区三区八戒| 国产传媒欧美日韩成人| 欧美午夜片在线看| 日本一区二区不卡视频| 蜜臀av一区二区| 日本伦理一区二区| 国产人成亚洲第一网站在线播放| 午夜免费久久看| 97精品超碰一区二区三区| 精品国产乱子伦一区| 亚洲国产一区二区三区青草影视| 国产成人在线网站| 日韩一区二区免费在线电影| 亚洲欧美日韩国产手机在线 | 国产精品影视天天线| 欧美三级日韩在线| 国产精品成人网| 国产伦精品一区二区三区免费| 欧美日免费三级在线| 国产精品沙发午睡系列990531| 久久精品理论片| 欧美三级在线看| 亚洲三级电影网站| 粉嫩嫩av羞羞动漫久久久| 欧美一个色资源| 五月开心婷婷久久| 日本丰满少妇一区二区三区|