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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? socket.cpp

?? 由一個古老的BASIC解釋器改進而成, 保留了ANSI C固有的藝術(shù)美感.
?? CPP
字號:
// socket.cpp

#include "socket.h"

#include <errno.h>

#ifdef _Windows

#include <winsock.h>

typedef SOCKET TypeSocket;
const TypeSocket InvalidSocket= INVALID_SOCKET;
inline bool isInvalidSocket (TypeSocket s)
	{ return s == INVALID_SOCKET; }

namespace {

class InitWinSock {
        InitWinSock ()
        {
                WSADATA data;
                r= WSAStartup (0x0101, & data);
        }
        ~InitWinSock ()
        {
                WSACleanup ();
        }
        int r;
        static InitWinSock init;
};

InitWinSock InitWinSock::init;

} // namespace

#else

#include <unistd.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>

typedef int TypeSocket;
const TypeSocket InvalidSocket= -1;
inline bool isInvalidSocket (TypeSocket s)
	{ return s < 0; }
inline int closesocket (int handle) { return close (handle); }

#endif 

#ifdef __BORLANDC__
#pragma warn -inl
#endif

//**********************************************************
//		SocketError
//**********************************************************

std::string SocketError::strErr= "Error de socket en ";

SocketError::SocketError (const std::string & nstr)
{
	str= strErr;
	str+= nstr;
}

SocketError::SocketError (const std::string & nstr, int errnum)
{
	str= strErr;
	str+= nstr;
	str+= ": ";
	str+= strerror (errnum);
}

const char * SocketError::what () const throw ()
{
	return str.c_str ();
}

//**********************************************************
//		Socket::Internal
//**********************************************************

class Socket::Internal {
public:
	Internal () :
		 refcount (1), s (InvalidSocket), maxbuf (0), posbuf (0)
	{
        }
	void addref () { ++refcount; }
	void delref ()
	{
		if (--refcount == 0) {
			if (! isInvalidSocket (s) )
				closesocket (s);
			delete this;
		}
	}
	void set (TypeSocket ns) { s= ns; }
	TypeSocket handle () { return s; }
	int connect (sockaddr * name, int namelen)
	{
		//if (! isInvalidSocket (s) )
		//	throw SocketError ("connect: ya esta conectado");
		return ::connect (s, name, namelen);
	}
	bool eof ()
	{
		if (posbuf < maxbuf)
			return false;
		getbuffer ();
		return maxbuf == 0;
	}
	int recv (char * bufrec, size_t len, int flags= 0);
	int send (const char * buffer, size_t len, int flags= 0)
	{
		return ::send (s, buffer, len, flags);
	}
	char get ()
	{
		if (posbuf >= maxbuf) {
			getbuffer ();
			if (maxbuf == 0) return 0;
		}
		return buffer [posbuf++];
	}
private:
	size_t refcount;
	TypeSocket s;
	static const size_t bufsiz= 1024;
	char buffer [bufsiz];
	size_t maxbuf, posbuf;
	void getbuffer ()
	{
		posbuf= 0;
		maxbuf= 0;
		int i= ::recv (s, buffer, bufsiz, 0);
		if (i > 0)
			maxbuf= i;
	}
};

int Socket::Internal::recv (char * bufrec, size_t len, int flags)
{
	if (posbuf < maxbuf) {
		size_t send= maxbuf - posbuf;
		if (len < send) send= len;
		for (size_t i= 0, j= posbuf; i < send; ++i, ++j)
			bufrec [i]= buffer [j];
		posbuf+= send;
		return send;
	}
	return ::recv (s, bufrec, len, flags);
}

//**********************************************************
//		Socket
//**********************************************************

Socket::Socket ()
{
	in= new Internal;
}

Socket::Socket (const Socket & nsock)
{
	in= nsock.in;
	in->delref ();
}

Socket::~Socket ()
{
	in->delref ();
}

Socket &  Socket::operator = (const Socket & nsock)
{
	Internal * nin;
	nin= nsock.in;
	nin->addref ();
	in->delref ();
	in= nin;
	return * this;
}

#if 0
TypeSocket Socket::handle ()
{
	return in->handle ();
}
#endif

bool Socket::eof ()
{
	return in->eof ();
}

std::string Socket::readline ()
{
	char c;
	std::string str;
	while ( (c= in->get () ) != '\n' && c != '\0')
		str+= c;
	#if 0
	std::string::size_type l= str.size ();
	if (l > 0 && str [l - 1] == '\r')
		str.erase (l - 1);
	#endif
	return str;
}

int Socket::read (char * str, int len)
{
	return in->recv (str, len);
}

void Socket::write (const std::string & str)
{
	in->send (str.data (), str.size () );
}

void Socket::write (const char * str, size_t len)
{
	in->send (str, len);
}

//**********************************************************
//		TcpSocket
//**********************************************************

TcpSocket::TcpSocket ()
{
	protoent * pe= getprotobyname ("tcp");
	int proto= pe ? pe->p_proto : 0;
	TypeSocket s= socket (PF_INET, SOCK_STREAM, proto);
	in->set (s);
}

//**********************************************************
//		TcpSocketClient
//**********************************************************

TcpSocketClient::TcpSocketClient
	(const std::string & host, unsigned short port)
{
	hostent * hent= gethostbyname (host.c_str () );
	if (! hent)
		throw SocketError (std::string ("busqueda de host ") + host,
			errno);
	sockaddr_in addr;
	addr.sin_family= AF_INET;
	addr.sin_port= htons (port);
	addr.sin_addr= * (in_addr *) hent->h_addr_list [0];
	if (in->connect ( (sockaddr *) & addr, sizeof (addr) ) != 0)
		throw SocketError (std::string ("Conexion con ") + host,
			errno);
}

// Fin de socket.cpp

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人在线一区二区三区| 国产精品一级黄| 欧美国产乱子伦| 欧美影片第一页| 懂色中文一区二区在线播放| 日本亚洲天堂网| 亚洲精选视频在线| 国产视频911| 日韩精品一区二区三区老鸭窝| 色偷偷88欧美精品久久久| 国内成人自拍视频| 午夜影院久久久| 亚洲色欲色欲www| 久久久久国色av免费看影院| 91精选在线观看| 色视频欧美一区二区三区| 国产精品123| 久久超碰97中文字幕| 亚洲成人免费在线| 亚洲精品国产成人久久av盗摄| 久久看人人爽人人| 精品入口麻豆88视频| 欧美精品久久天天躁| 在线中文字幕不卡| 色欧美日韩亚洲| 91在线观看地址| 99久久免费视频.com| 国产91在线看| 国产精品456露脸| 国产制服丝袜一区| 国产在线精品不卡| 久色婷婷小香蕉久久| 日韩电影在线观看网站| 亚洲国产精品久久久久婷婷884| 亚洲欧美精品午睡沙发| 国产精品福利av| 中文字幕在线不卡一区二区三区 | 国产在线国偷精品免费看| 三级影片在线观看欧美日韩一区二区| 亚洲人成精品久久久久| 1000精品久久久久久久久| 中文字幕一区二区三区视频| 亚洲欧美在线aaa| 亚洲天堂成人网| 一区二区在线看| 亚洲综合清纯丝袜自拍| 夜夜精品浪潮av一区二区三区| 一区二区三区国产豹纹内裤在线| 一区二区三区在线视频免费| 亚洲黄色片在线观看| 一区二区国产视频| 午夜精品久久久久影视| 免费欧美在线视频| 精品一区二区在线看| 国产精品一二三| 不卡av免费在线观看| 91久久国产最好的精华液| 欧美日韩精品二区第二页| 欧美一区二区视频观看视频| 精品美女一区二区三区| 国产精品水嫩水嫩| 亚洲综合自拍偷拍| 久久精品国产999大香线蕉| 国产成人精品午夜视频免费| 97久久人人超碰| 67194成人在线观看| 精品国精品国产| 国产精品成人午夜| 亚洲成人一区二区| 国产最新精品免费| 91蝌蚪porny| 日韩欧美成人午夜| 中文字幕一区二区三区不卡在线 | 蜜臀a∨国产成人精品| 久草中文综合在线| 成人一区二区三区视频| 欧美中文字幕一区二区三区亚洲| 日韩欧美成人午夜| 亚洲视频一区二区在线观看| 手机精品视频在线观看| 国产精品一区二区在线观看不卡 | 日本成人在线不卡视频| 国产精品自在在线| 日本乱人伦aⅴ精品| 日韩视频在线一区二区| 国产精品久久福利| 午夜成人免费电影| 成人夜色视频网站在线观看| 欧美日韩精品一区二区| 久久久精品免费网站| 亚洲一区二区视频在线观看| 极品少妇xxxx精品少妇偷拍| 色伊人久久综合中文字幕| 精品久久久久久久久久久久久久久久久| 国产精品久久久久久一区二区三区 | 国产在线播放一区| 在线观看成人免费视频| 久久午夜电影网| 亚洲成人久久影院| 成人av资源网站| 精品日韩在线观看| 午夜精品123| 色综合色狠狠天天综合色| 久久久久久久性| 日韩二区在线观看| 色呦呦日韩精品| 国产日韩欧美精品电影三级在线| 午夜视频久久久久久| 成人免费视频播放| 2020国产精品久久精品美国| 亚洲成人福利片| 色综合久久久网| 久久久久88色偷偷免费| 蜜桃av噜噜一区二区三区小说| 日本乱人伦一区| 成人免费在线视频| 夫妻av一区二区| 久久亚洲私人国产精品va媚药| 亚洲超丰满肉感bbw| 欧美专区日韩专区| 亚洲人成在线播放网站岛国| 成年人国产精品| 国产欧美日韩久久| 国产不卡高清在线观看视频| 久久一夜天堂av一区二区三区| 蜜臀av性久久久久av蜜臀妖精 | 中文字幕av一区二区三区高| 狠狠久久亚洲欧美| 日韩欧美中文字幕精品| 日韩avvvv在线播放| 91精品在线免费| 日韩成人av影视| 91精品中文字幕一区二区三区| 五月天欧美精品| 7878成人国产在线观看| 日韩av电影天堂| 日韩三级免费观看| 韩国精品一区二区| 欧美精品一区在线观看| 国产成人自拍在线| 欧美激情一区二区三区全黄| 成人性生交大片免费看在线播放| 欧美激情综合五月色丁香 | 成人综合在线观看| 国产精品久久久久久久久图文区 | 久久99精品网久久| 精品美女在线播放| 国产不卡免费视频| 亚洲欧美中日韩| 欧美性猛片xxxx免费看久爱| 婷婷夜色潮精品综合在线| 欧美一级黄色录像| 国产一区二区三区日韩| 国产欧美日韩综合精品一区二区| 从欧美一区二区三区| 中文字幕在线一区二区三区| av不卡免费电影| 亚洲黄色片在线观看| 欧美精品xxxxbbbb| 国产在线精品免费av| 中文字幕一区二区三区视频| 欧美体内she精视频| 久久精品国内一区二区三区| 国产嫩草影院久久久久| 色哟哟在线观看一区二区三区| 午夜激情一区二区| 久久精品一区八戒影视| 99久久国产综合精品色伊| 亚洲成在线观看| 久久久久久久久99精品| 91丨九色porny丨蝌蚪| 天天做天天摸天天爽国产一区| 精品国精品国产| 97久久精品人人做人人爽 | 日韩1区2区日韩1区2区| 久久精品免费在线观看| 色婷婷激情综合| 精品一区二区三区在线播放视频| 国产精品久久久久一区 | 欧美一区二区三区四区在线观看| 国产精品一区不卡| 一区二区三区中文字幕在线观看| 欧美一区二区精品在线| 成人av在线资源网站| 日韩极品在线观看| 中文字幕中文字幕中文字幕亚洲无线| 欧美精品在欧美一区二区少妇| 国产成人免费xxxxxxxx| 亚洲一区二区美女| 国产午夜精品一区二区三区视频 | 波多野结衣在线一区| 天天亚洲美女在线视频| 国产精品麻豆久久久| 91精品在线麻豆| 色哟哟亚洲精品| 国产成人精品免费| 日韩av一二三| 亚洲精品一二三| 国产欧美日韩在线视频| 日韩欧美国产精品|