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

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

?? mysock.c

?? sourceforge歷史版本完整下載: http://sourceforge.net/project/showfiles.php?group_id=202044 提供了基于b樹索引算法的文件數據數據
?? C
字號:
/*** @file mysock.c 描述sock相關的封裝,目前主要提供udp與tcp 2008-03-25 23:25** @author lin shao chuan (email:lsccsl@tom.com, msn:lsccsl@163.net)** @brief if it works, it was written by lin shao chuan, if not, i don't know who wrote it.        ** Permission to use, copy, modify, distribute and sell this software* and its documentation for any purpose is hereby granted without fee,* provided that the above copyright notice appear in all copies and* that both that copyright notice and this permission notice appear* in supporting documentation.  lin shao chuan makes no* representations about the suitability of this software for any* purpose.  It is provided "as is" without express or implied warranty.* see the GNU General Public License  for more detail.*/#include "mysock.h"#ifdef WIN32	#include <winsock2.h>	#include <io.h>#else	#include <sys/socket.h>	#include <arpa/inet.h>#endif#include <assert.h>#include "mybuffer.h"#include "os_def.h"typedef struct sockaddr SA;typedef struct __uos_udp_t_{	unsigned short port;	HMYBUFFER hip;	int fd;	HMYMEMPOOL hm;}uos_udp_t;#ifdef WIN32	#pragma warning(disable:4311)	static int ini_winsock()	{		int err = -1;		WSADATA wsadata;		static int ini_flag = 0;		if(ini_flag)			return 0;		WSAStartup(0x0202, &wsadata);		err = WSAGetLastError();		if(err != 0)			return -1;		ini_flag = 1;		return 0;	}#else	#define ini_winsock() ((void)0)#endif/** * @brief 創建命名管道 */static int socket_bind(int fd, const char * ip, unsigned short * port){#define MAX_BIND_RETRY 10	int i;	struct sockaddr_in stSockAddr;	assert(ip && port);	memset(&stSockAddr, 0, sizeof(stSockAddr));	for(i = 0; i < MAX_BIND_RETRY; i ++)	{		int ret = 0;		stSockAddr.sin_family = AF_INET;		stSockAddr.sin_addr.s_addr = inet_addr(ip);		stSockAddr.sin_port = htons(*port);		ret = bind(fd, (SA *)&stSockAddr, sizeof(stSockAddr));		if(0 == ret)			return 0;		*port ++;	}	return -1;#undef MAX_BIND_RETRY}/** * @brief 創建命名管道 */static int udp_destroy(uos_udp_t * udp){	assert(udp);	if(udp->hip)		MyBufferDestruct(udp->hip);#ifdef WIN32	closesocket(udp->fd);#else	close(udp->fd);#endif	MyMemPoolFree(udp->hm, udp);	return 0;}/** * @brief 創建命名管道 */HUOSUDP UOS_UDPConstruct(HMYMEMPOOL hm, const char * ip, unsigned short * port){	uos_udp_t * udp = NULL;	assert(port && ip);#ifdef WIN32	if(0 != ini_winsock())		return NULL;#endif	udp = MyMemPoolMalloc(hm, sizeof(*udp));	if(NULL == udp)		return NULL;	udp->hm = hm;	udp->port = *port;	udp->hip = MyBufferConstruct(hm, strlen(ip) + 1);	if(NULL == udp->hip)		goto UOS_UDPConstruct_err_;	MyBufferSet(udp->hip, ip, strlen(ip));	MyBufferAppend(udp->hip, "\0", 1);	udp->fd = (int)socket(AF_INET, SOCK_DGRAM,0);	if((int)INVALID_FD == udp->fd)		goto UOS_UDPConstruct_err_;	if(0 != socket_bind(udp->fd, ip, &udp->port))		goto UOS_UDPConstruct_err_;	*port = udp->port;	return udp;UOS_UDPConstruct_err_:	if(udp)		udp_destroy(udp);	return NULL;}/** * @brief 創建命名管道 */int UOS_UDPDestruct(HUOSUDP hudp){	if(NULL == hudp)		return -1;	return udp_destroy(hudp);}/** * @brief 寫udp */int UOS_UDPWriteTo(HUOSUDP hudp, const void * buf, size_t buf_sz,				   const char * ip, const unsigned short port){	struct sockaddr_in saddr;	if(NULL == hudp || NULL == buf || 0 == buf_sz)		return -1;	if((int)INVALID_FD == hudp->fd)		return -1;	memset(&saddr, 0, sizeof(saddr));	saddr.sin_family = AF_INET;	saddr.sin_addr.s_addr = inet_addr(ip);	saddr.sin_port = htons(port);	return sendto(hudp->fd, buf, (int)buf_sz, 0, (SA *)&saddr, sizeof(saddr));}/** * @brief 讀udp */int UOS_UDPReadFrom(HUOSUDP hudp, void * buf, size_t buf_sz,				char * ip, size_t ip_sz, unsigned short * port){	int ret = 0;	struct sockaddr_in saddr;	int sadd_sz = sizeof(saddr);	if(NULL == hudp || NULL == buf || 0 == buf_sz)		return -1;	ret = recvfrom(hudp->fd, buf, (int)buf_sz, 0, (SA *)&saddr, (int*)&sadd_sz);	if(ret > 0)	{		if(port)			*port = ntohs(saddr.sin_port);		if(ip && ip_sz)			strncpy(ip, inet_ntoa(saddr.sin_addr), ip_sz);	}	return ret;}/** * @brief 獲取udp的fd */int UOS_UDPGetFd(HUOSUDP hudp){	if(NULL == hudp)		return (int)INVALID_FD;	return hudp->fd;}typedef struct __uos_tcp_t_{	unsigned short port;	HMYBUFFER hip;	int fd;	HMYMEMPOOL hm;}uos_tcp_t;/**
 * @brief 創建命名管道
 */
static void tcp_destroy(uos_tcp_t * tcp)
{
	assert(tcp);	if(tcp->hip)		MyBufferDestruct(tcp->hip);#ifdef WIN32	closesocket(tcp->fd);#else	close(tcp->fd);#endif	MyMemPoolFree(tcp->hm, tcp);	return;}
/**
 * @brief 創建命名管道
 */
HUOSTCP UOS_TCPConstruct(HMYMEMPOOL hm, const char * ip, unsigned short * port)
{
	uos_tcp_t * tcp = NULL;
	assert(port && ip);#ifdef WIN32	if(0 != ini_winsock())		return NULL;#endif	tcp = MyMemPoolMalloc(hm, sizeof(*tcp));	if(NULL == tcp)		return NULL;	tcp->hm = hm;	tcp->port = *port;	tcp->hip = MyBufferConstruct(hm, strlen(ip) + 1);	if(NULL == tcp->hip)		goto UOS_TCPConstruct_err_;	MyBufferSet(tcp->hip, ip, strlen(ip));	MyBufferAppend(tcp->hip, "\0", 1);	tcp->fd = (int)socket(AF_INET, SOCK_STREAM,0);	if((int)INVALID_FD == tcp->fd)		goto UOS_TCPConstruct_err_;	if(0 != socket_bind(tcp->fd, ip, &tcp->port))		goto UOS_TCPConstruct_err_;	*port = tcp->port;		return tcp;UOS_TCPConstruct_err_:	if(tcp)		tcp_destroy(tcp);	return NULL;}

/**
 * @brief tcp監聽遠端連接請求
 */
int UOS_TCPListerner(HUOSTCP htcp)
{
	if(NULL == htcp)
		return -1;

	if((int)INVALID_FD == htcp->fd)
		return -1;

	if(0 != listen(htcp->fd, SOMAXCONN))
		return -1;

	return 0;
}

/**
 * @brief 接受對端的tcp連接請求
 */
HUOSTCP UOS_TCPAccept(HUOSTCP htcp, char * ip, size_t ip_sz, unsigned short * port)
{
	uos_tcp_t * accept_tcp = NULL;
	struct sockaddr_in saddr;	int sadd_sz = sizeof(saddr);
	assert(ip && ip_sz && port);

	accept_tcp = MyMemPoolMalloc(htcp->hm, sizeof(*accept_tcp));
	memset(accept_tcp, 0, sizeof(*accept_tcp));

	accept_tcp->hm = htcp->hm;

	accept_tcp->fd = (int)accept(htcp->fd, (struct sockaddr *)&saddr, &sadd_sz);
	if((int)INVALID_FD == accept_tcp->fd)
		goto UOS_TCPAccept_err_;

	if(inet_ntoa(saddr.sin_addr) && ip && ip_sz)
		strncpy(ip, inet_ntoa(saddr.sin_addr), ip_sz);

	if(port)
		*port = ntohs(saddr.sin_port);

	return accept_tcp;

UOS_TCPAccept_err_:

	tcp_destroy(accept_tcp);

	return NULL;
}

/**
 * @brief 銷毀一個tcp對象
 */
void UOS_TCPDestruct(HUOSTCP htcp)
{
	if(NULL == htcp)
		return;

	tcp_destroy(htcp);
}

/**
 * @brief 連接到對端
 */
int UOS_TCPConnect(HUOSTCP htcp, char * ip, unsigned short port)
{
	struct sockaddr_in saddr;	if(NULL == htcp || NULL == ip || (int)INVALID_FD == htcp->fd)
		return -1;

	memset(&saddr, 0, sizeof(saddr));	saddr.sin_family = AF_INET;	saddr.sin_addr.s_addr = inet_addr(ip);	saddr.sin_port = htons(port);

	if(0 != connect(htcp->fd, (SA *)&saddr, sizeof(saddr)))
		return -1;

	return 0;
}

/**
 * @brief 寫tcp
 */
int UOS_TCPWrite(HUOSTCP htcp, const void * buf, size_t buf_sz)
{
	if(NULL == htcp || NULL == buf || 0 == buf_sz || (int)INVALID_FD == htcp->fd)
		return -1;

	return send(htcp->fd, buf, (int)buf_sz, 0);
}

/**
 * @brief 寫tcp,如果未寫足,在指定的次數內重試
 */
int UOS_TCPCompleteWrite(HUOSTCP htcp, const void * buf, size_t buf_sz, int retry_count)
{
	size_t write_sz = 0;

	if(NULL == htcp || NULL == buf || 0 == buf_sz || (int)INVALID_FD == htcp->fd)
		return -1;

	while(write_sz < buf_sz)
	{
		int ret = send(htcp->fd, (unsigned char *)buf + write_sz, (int)(buf_sz - write_sz), 0);
		if(-1 != ret)
			write_sz += ret;

		if(retry_count <= 0)
			break;

		retry_count --;
	}

	return (write_sz == buf_sz) ? 0 : -1;
}

/**
 * @brief 讀tcp
 */
int UOS_TCPRead(HUOSTCP htcp, void * buf, size_t buf_sz)
{
	if(NULL == htcp || NULL == buf || 0 == buf_sz || (int)INVALID_FD == htcp->fd)
		return -1;

	return recv(htcp->fd, buf, (int)buf_sz, 0);
}

/**
 * @brief 讀tcp,如果未讀足,在指定的次數內重試
 */
int UOS_TCPCompleteRead(HUOSTCP htcp, const void * buf, size_t buf_sz, int retry_count)
{
	size_t write_sz = 0;

	if(NULL == htcp || NULL == buf || 0 == buf_sz || (int)INVALID_FD == htcp->fd)
		return -1;

	while(write_sz < buf_sz)
	{
		int ret = recv(htcp->fd, (unsigned char *)buf + write_sz, (int)(buf_sz - write_sz), 0);
		if(-1 != ret)
			write_sz += ret;

		if(retry_count <= 0)
			break;

		retry_count --;
	}

	return (write_sz == buf_sz) ? 0 : -1;
}

/**
 * @brief 獲取tcp的fd
 */
int UOS_TCPGetFd(HUOSTCP htcp){	if(NULL == htcp || (int)INVALID_FD == htcp->fd)
		return (int)INVALID_FD;

	return htcp->fd;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色欧美乱欧美15图片| 国产一区二区看久久| www激情久久| 一本大道av伊人久久综合| 日韩和的一区二区| 中文字幕字幕中文在线中不卡视频| 欧美美女网站色| 色综合久久久久网| 成人深夜视频在线观看| 麻豆精品国产传媒mv男同| 亚洲第一狼人社区| 亚洲欧洲av在线| 国产日韩精品一区二区三区在线| 欧美一区二区在线播放| 91在线你懂得| 波多野结衣中文字幕一区二区三区| 日本v片在线高清不卡在线观看| 亚洲欧美一区二区三区极速播放 | 精品视频在线视频| 成人午夜视频网站| 国产精品一二三区| 青青青爽久久午夜综合久久午夜| 亚洲国产综合人成综合网站| 国产精品免费网站在线观看| 精品国产污污免费网站入口| 911精品国产一区二区在线| 在线观看成人小视频| av电影在线观看完整版一区二区| 韩国在线一区二区| 视频一区欧美日韩| 日韩专区在线视频| 一区二区三区在线不卡| 欧美色网一区二区| 欧亚一区二区三区| 色哟哟一区二区三区| 91小视频免费观看| 色香蕉成人二区免费| 91免费观看视频在线| 99久久国产综合精品色伊| 成人免费av资源| 成人黄色777网| 99久久99久久免费精品蜜臀| 99精品久久99久久久久| 99精品视频在线观看免费| 99久久99久久久精品齐齐| 成人app软件下载大全免费| 成人h精品动漫一区二区三区| 成人少妇影院yyyy| 色哦色哦哦色天天综合| 欧美性xxxxx极品少妇| 欧美色图天堂网| 三级久久三级久久久| 91麻豆国产在线观看| 在线观看欧美黄色| 欧美精品日韩精品| 日韩一区国产二区欧美三区| 日韩欧美一级二级| 久久精品免视看| 国产精品视频yy9299一区| 亚洲女性喷水在线观看一区| 亚洲激情在线播放| 丝袜诱惑制服诱惑色一区在线观看 | 欧美日韩精品一区二区三区| 欧美电影在线免费观看| 欧美电影免费观看高清完整版在线 | 亚洲欧洲av在线| 悠悠色在线精品| 视频一区在线播放| 国产精品996| 99国内精品久久| 欧美二区三区的天堂| www久久精品| 亚洲精品一二三四区| 美腿丝袜在线亚洲一区| 成人午夜av电影| 欧美色视频一区| 久久久久国产一区二区三区四区 | 欧美精品一区二区三区蜜臀| 国产精品三级视频| 石原莉奈一区二区三区在线观看| 国产乱人伦偷精品视频免下载| 91麻豆免费视频| 日韩精品一区二区三区中文精品| 国产精品久久免费看| 丝袜诱惑亚洲看片| 成人福利在线看| 日韩欧美一区电影| 亚洲精品免费一二三区| 六月丁香婷婷色狠狠久久| 97久久超碰国产精品| 欧美本精品男人aⅴ天堂| 亚洲精品视频免费看| 国产一区二区美女| 欧美日韩精品一区二区三区四区| 久久久久久一级片| 午夜精品视频在线观看| 成人免费高清在线| 精品日产卡一卡二卡麻豆| 一区二区三区色| 国产成人在线电影| 日韩欧美一卡二卡| 亚洲第一搞黄网站| 91麻豆123| 欧美极品美女视频| 激情小说亚洲一区| 欧美丰满高潮xxxx喷水动漫| 亚洲男女一区二区三区| 国产精品一卡二卡在线观看| 3751色影院一区二区三区| 亚洲最新视频在线播放| 成人午夜电影网站| 久久久国产一区二区三区四区小说 | 久久综合九色欧美综合狠狠| 亚洲综合999| 97se亚洲国产综合自在线| 久久综合久久鬼色中文字| 久久精品国内一区二区三区| 欧美军同video69gay| 亚洲黄色片在线观看| 成人ar影院免费观看视频| 国产欧美视频一区二区| 另类小说欧美激情| 91精品国产免费| 日韩激情在线观看| 欧美日韩三级视频| 亚洲大片一区二区三区| 在线欧美日韩国产| 亚洲综合一区二区三区| 成人av在线资源网站| 国产精品久久久久久妇女6080| 国产精品99久久久久久有的能看| 精品国精品自拍自在线| 紧缚捆绑精品一区二区| 26uuu欧美| 国产精品69毛片高清亚洲| 国产亚洲精品超碰| 国产精品77777竹菊影视小说| 国产无一区二区| 成人性生交大片免费看视频在线 | 亚洲国产精品综合小说图片区| 99久久免费视频.com| 亚洲免费av网站| 欧美在线观看一二区| 亚洲成人一二三| 欧美日韩国产系列| 日本一不卡视频| 日韩视频在线你懂得| 国产一区二区主播在线| 国产日韩欧美综合一区| eeuss鲁一区二区三区| 中文字幕在线一区| 91精品福利视频| 亚洲国产aⅴ成人精品无吗| 69久久夜色精品国产69蝌蚪网| 日韩影院在线观看| 久久久综合网站| 成人爱爱电影网址| 亚洲国产成人高清精品| 欧美一二三区在线观看| 懂色av一区二区在线播放| 亚洲丝袜精品丝袜在线| 欧美日韩成人高清| 精品一区二区在线免费观看| 国产女主播一区| 欧美日韩一区二区电影| 国产主播一区二区| 亚洲丝袜另类动漫二区| 制服丝袜激情欧洲亚洲| 国产一区二区伦理| 一区二区三区在线视频免费观看| 91精品国产欧美一区二区成人| 国产成人夜色高潮福利影视| 亚洲美女区一区| 欧美一级xxx| 成人av免费在线观看| 亚洲国产一区在线观看| 欧美精品一区二区三区高清aⅴ| 成人免费视频网站在线观看| 亚洲成a人片在线观看中文| 久久伊人蜜桃av一区二区| 91小视频免费看| 国产在线观看一区二区| 一区二区视频在线| 久久先锋影音av鲁色资源网| 欧美亚洲一区二区在线| 国产精品亚洲第一区在线暖暖韩国| 亚洲图片欧美激情| 精品sm在线观看| 欧美午夜在线一二页| 国产suv精品一区二区6| 日韩不卡一区二区三区| 国产精品视频免费看| 日韩三级中文字幕| 99re在线精品| 国产剧情av麻豆香蕉精品| 亚洲成人激情综合网| 欧美—级在线免费片| 日韩女优电影在线观看| 91亚洲精品久久久蜜桃| 国产精品亚洲一区二区三区妖精|