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

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

?? socket.c

?? 網(wǎng)絡攝像頭的webserver
?? C
字號:
#include <unistd.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <pthread.h>#include <netdb.h>#include <errno.h>#include <stdarg.h>#include <sys/poll.h>#include <fcntl.h>#include "config.h"#define MODULE_GENERIC#include "module.h"#include "socket.h"char *name = "socket";char *version = VERSION;intsocket_listen(unsigned short port, unsigned long ip){	int fd;	int ret;	struct sockaddr_in sin;		fd = socket(AF_INET, SOCK_STREAM, 0);	if (fd < 0)		return -1;		fcntl(fd, F_SETFL, O_NONBLOCK);	ret = 1;	setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &ret, sizeof(ret));		memset(&sin, 0, sizeof(sin));	sin.sin_family = AF_INET;	sin.sin_port = htons(port);	sin.sin_addr.s_addr = ip;	ret = bind(fd, (struct sockaddr *) &sin, sizeof(sin));	if (ret)	{		close(fd);		return -1;	}	ret = listen(fd, 5);	if (ret)	{		close(fd);		return -1;	}		return fd;}intsocket_accept(int fd, struct peer *peer, int timeout){	int newfd, socklen;	struct sockaddr_in sin;	int ret;	struct pollfd pfd;		if (fd < 0)		return -1;		memset(&pfd, 0, sizeof(pfd));	pfd.fd = fd;	pfd.events = POLLIN | POLLERR | POLLHUP;		ret = poll(&pfd, 1, timeout);	if (ret < 0)		return -1;	if (ret == 0)		return -2;		socklen = sizeof(peer->sin);	newfd = accept(fd, (struct sockaddr *) &sin, &socklen);	if (newfd == -1)		return -1;		fcntl(newfd, F_SETFL, O_NONBLOCK);		memset(peer, 0, sizeof(*peer));	peer->fd = newfd;	memcpy(&peer->sin, &sin, sizeof(peer->sin));	return 0;}intsocket_accept_thread(int fd, struct peer *peer, void *(*func)(void *), void *arg){	int newfd;	pthread_attr_t attr;	pthread_t tid;		newfd = socket_accept(fd, peer, -1);	if (newfd == -1)		return -1;	pthread_attr_init(&attr);	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);	pthread_create(&tid, &attr, func, arg);	pthread_attr_destroy(&attr);		return 0;}intsocket_readline(struct peer *peer, char *buf, unsigned int bufsize, int timeout){	int ret;	unsigned int count;		if (peer->fd < 0)		return -1;		count = 0;	for (;;)	{		ret = socket_read(peer, buf, 1, timeout);		if (ret == -2)			return -2;		if (ret == 0)		{			socket_close(peer);			return -3;		}		if (ret != 1)		{closeerr:			socket_close(peer);			return -1;		}		if (*buf == '\n')			break;		buf++;		count++;		if (count >= bufsize)			goto closeerr;	}		*buf-- = '\0';	if (count >= 1 && *buf == '\r')		*buf = '\0';			return 0;}char *socket_ip(struct peer *peer){	snprintf(peer->tbuf, sizeof(peer->tbuf) - 1,		"%u.%u.%u.%u",		(peer->sin.sin_addr.s_addr >>  0) & 0xff,		(peer->sin.sin_addr.s_addr >>  8) & 0xff,		(peer->sin.sin_addr.s_addr >> 16) & 0xff,		(peer->sin.sin_addr.s_addr >> 24) & 0xff);	return peer->tbuf;}unsigned intsocket_port(struct peer *peer){	return (unsigned int) ntohs(peer->sin.sin_port);}intsocket_connect(struct peer *peer, char *host, int port, int timeout){	struct peer p;	int ret;	struct hostent hent, *hentp;	int herrno;	int bufsize;	char *buf;	struct pollfd pfd;		if (!peer || !host || !*host)		return -1;	if (port <= 0 || port > 0xffff)		return -1;		memset(&p, 0, sizeof(p));		ret = inet_aton(host, &p.sin.sin_addr);	if (!ret)	{		bufsize = 512;		for (;;)		{			buf = malloc(bufsize);			errno = 0;			herrno = 0;			ret = gethostbyname_r(host, &hent, buf, bufsize, &hentp, &herrno);			/* the man page isn't clear about where ERANGE is returned, so... */			if (ret && (ret == ERANGE || errno == ERANGE || herrno == ERANGE))			{				free(buf);				bufsize *= 2;				continue;			}			break;		}		if (ret || !hentp)			return -2;		if (hent.h_addrtype != AF_INET || hent.h_length != 4 || !hent.h_addr_list[0])			return -3;		memcpy(&p.sin.sin_addr.s_addr, hent.h_addr_list[0], 4);	}		p.sin.sin_family = AF_INET;	p.sin.sin_port = htons(port);	p.fd = socket(AF_INET, SOCK_STREAM, 0);	if (p.fd < 0)		return -4;	fcntl(p.fd, F_SETFL, O_NONBLOCK);	ret = connect(p.fd, (struct sockaddr *) &p.sin, sizeof(p.sin));	if (ret)	{		if (errno == EINPROGRESS)		{			if (!timeout)			{				memcpy(peer, &p, sizeof(*peer));				return -6;			}						memset(&pfd, 0, sizeof(pfd));			pfd.fd = p.fd;			pfd.events = POLLOUT | POLLERR | POLLHUP;						ret = poll(&pfd, 1, timeout);						if (ret < 0)				goto connecterr;			if (ret == 0)			{				close(p.fd);				return -6;			}			if (pfd.revents & (POLLERR | POLLHUP))			{				ret = sizeof(herrno);				getsockopt(p.fd, SOL_SOCKET, SO_ERROR, &herrno, &ret);				errno = herrno;				goto connecterr;			}		}		else		{connecterr:			close(p.fd);			return -5;		}	}			memcpy(peer, &p, sizeof(*peer));	return 0;}voidsocket_close(struct peer *peer){	if (peer->fd < 0)		return;	close(peer->fd);	peer->fd = -1;}intsocket_printf(struct peer *peer, char *format, ...){	va_list vl;	int ret;		va_start(vl, format);	ret = socket_vprintf(peer, format, vl);	va_end(vl);		return ret;}intsocket_vprintf(struct peer *peer, char *format, va_list vl){	char buf[1024];	int ret, len;	if (peer->fd < 0)		return -1;		vsnprintf(buf, sizeof(buf) - 1, format, vl);	len = strlen(buf);	ret = write(peer->fd, buf, len);	if (ret != len)	{		socket_close(peer);		return -1;	}		return 0;}voidsocket_fill(int fd, struct peer *peer){	int socklen;		memset(peer, 0, sizeof(*peer));	peer->fd = fd;	socklen = sizeof(peer->sin);	getsockname(fd, (struct sockaddr *) &peer->sin, &socklen);}intsocket_read(struct peer *peer, char *buf, int size, int timeout){	int ret;	struct pollfd pfd;	memset(&pfd, 0, sizeof(pfd));	pfd.fd = peer->fd;	pfd.events = POLLIN | POLLERR | POLLHUP;		ret = poll(&pfd, 1, timeout);	if (ret < 0)		return -1;	if (ret == 0)		return -2;	ret = read(peer->fd, buf, size);	return ret;}intsocket_write(struct peer *peer, char *buf, int size, int timeout){	int ret;	struct pollfd pfd;	int written;		written = 0;	for (;;)	{		ret = write(peer->fd, buf, size);				if (ret < 0)		{			if (errno == EAGAIN || errno == EWOULDBLOCK)			{writepoll:				memset(&pfd, 0, sizeof(pfd));				pfd.fd = peer->fd;				pfd.events = POLLOUT | POLLERR | POLLHUP;								ret = poll(&pfd, 1, timeout);								if (ret < 0)					return -1;				if (ret == 0)					return -2;				if (!(pfd.events & POLLOUT))					return -1;				continue;			}						return -1;		}		else if (ret == 0)			goto writepoll;		else		{			written += ret;			size -= ret;			if (size <= 0)				return written;			buf += ret;		}	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产亚洲另类动漫| 91国产福利在线| 精品国产乱码久久久久久浪潮| 亚洲小少妇裸体bbw| 欧美亚洲动漫制服丝袜| 日韩不卡一二三区| 欧美tk—视频vk| 国产精品影视天天线| 国产精品视频第一区| 99精品国产热久久91蜜凸| 亚洲一区在线视频观看| 欧美一二三区精品| 国产高清在线精品| 亚洲精品日日夜夜| 欧美一区二区观看视频| 国产麻豆视频一区二区| 亚洲美女电影在线| 制服丝袜av成人在线看| 国产成人综合精品三级| 亚洲免费在线电影| 欧美一区二区三区啪啪| 国产成人在线免费| 亚洲精品国产品国语在线app| 欧美日韩免费视频| 国产黄色成人av| 一区二区三区**美女毛片| 91精品国产综合久久香蕉的特点| 国产专区欧美精品| 亚洲影院久久精品| 国产天堂亚洲国产碰碰| 欧美日韩国产首页| 成人一区二区在线观看| 亚洲成人综合视频| 久久精品欧美日韩精品| 91国模大尺度私拍在线视频| 久久不见久久见免费视频7| 亚洲欧美一区二区三区久本道91 | 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美成人一区二区| 91视频在线观看| 久久精品国产99国产| 亚洲免费在线视频一区 二区| 欧美一级xxx| 91极品美女在线| 国产成人午夜片在线观看高清观看| 亚洲视频一区二区在线| 久久久久久久久久电影| 7799精品视频| 91网站最新地址| 国产精品一二一区| 秋霞午夜av一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 精品理论电影在线| 欧美一区二区三区免费大片| 91免费精品国自产拍在线不卡| 国产一区二区三区黄视频| 午夜精品影院在线观看| 亚洲综合一区二区三区| 国产精品不卡在线| 国产欧美一区二区精品仙草咪| 欧美疯狂做受xxxx富婆| 91丨porny丨在线| 波多野结衣亚洲一区| 国产另类ts人妖一区二区| 蜜桃一区二区三区在线观看| 亚洲小少妇裸体bbw| 一区二区三区在线播放| 亚洲日本在线视频观看| 亚洲欧洲色图综合| 中文字幕色av一区二区三区| 国产午夜精品一区二区三区视频 | 成人精品免费网站| 一本大道久久a久久综合| 久久精品国产一区二区三区免费看| 一区二区在线免费观看| 综合激情成人伊人| 最新日韩在线视频| 日韩一区有码在线| 国产精品美日韩| 中文字幕制服丝袜一区二区三区| 中文字幕av一区二区三区免费看| 国产欧美综合在线观看第十页| 精品蜜桃在线看| 久久久亚洲国产美女国产盗摄| 久久精品视频一区二区三区| 久久久久久久电影| 国产蜜臀av在线一区二区三区 | 欧美成人三级电影在线| 日韩欧美国产电影| 久久亚洲一级片| 国产亚洲精久久久久久| 国产精品久久久久久户外露出| 国产精品无人区| 亚洲精品乱码久久久久久| 洋洋成人永久网站入口| 国产99久久久国产精品| 91尤物视频在线观看| 国产精品久久久久四虎| 亚洲日本在线观看| 午夜视频一区二区| 麻豆一区二区三区| 国产v综合v亚洲欧| 色综合咪咪久久| 欧美一区二区在线免费观看| 久久婷婷综合激情| 中文字幕一区二区三区精华液| 一区二区国产视频| 精品在线一区二区| 99精品国产99久久久久久白柏| 欧美三区在线视频| 久久免费精品国产久精品久久久久| 国产精品入口麻豆九色| 亚洲一区二区美女| 国内成人精品2018免费看| 成人免费的视频| 欧美日韩成人激情| 久久精品视频在线免费观看| 一区二区三区四区在线免费观看 | 国产精品丝袜一区| 亚洲午夜日本在线观看| 国产成人在线网站| 欧美日高清视频| 国产精品白丝在线| 另类成人小视频在线| 99在线精品视频| 精品久久国产97色综合| 亚洲人成伊人成综合网小说| 人人狠狠综合久久亚洲| 波多野结衣中文字幕一区| 欧美一级日韩不卡播放免费| 国产精品电影一区二区| 男男成人高潮片免费网站| 91丨九色丨国产丨porny| 欧美电视剧在线看免费| 亚洲最大色网站| 成人综合婷婷国产精品久久免费| 777久久久精品| 亚洲免费观看高清| 丰满少妇久久久久久久| 日韩午夜激情视频| 亚洲国产精品尤物yw在线观看| 成人激情免费电影网址| 2020日本不卡一区二区视频| 天堂av在线一区| 色嗨嗨av一区二区三区| 国产精品免费网站在线观看| 久久精品国产99| 正在播放亚洲一区| 亚洲第一综合色| 色综合久久综合网97色综合 | 欧美成人伊人久久综合网| 亚洲va欧美va人人爽| 日本精品视频一区二区三区| 中文一区二区在线观看| 国模一区二区三区白浆| 欧美电视剧在线观看完整版| 天堂在线一区二区| 欧美精品久久一区二区三区| 亚洲精品免费看| 91亚洲资源网| 亚洲色图欧洲色图婷婷| 成人18视频在线播放| 久久久综合网站| 国产精品综合一区二区三区| 日韩欧美国产1| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩国产a| 午夜精品一区在线观看| 69精品人人人人| 老司机精品视频导航| 欧美一区二区视频在线观看2022| 婷婷开心激情综合| 欧美日本高清视频在线观看| 五月综合激情日本mⅴ| 7777精品伊人久久久大香线蕉的| 午夜精品在线视频一区| 日韩一区二区免费高清| 黑人巨大精品欧美黑白配亚洲| 久久久久久免费| kk眼镜猥琐国模调教系列一区二区 | 欧美日韩色综合| 日韩av电影免费观看高清完整版| 91精品久久久久久久久99蜜臂| 久久成人羞羞网站| 国产视频一区不卡| eeuss鲁片一区二区三区在线看| 亚洲视频狠狠干| 91精品在线免费观看| 极品尤物av久久免费看| 中文字幕av免费专区久久| 日本韩国欧美国产| 日韩精品1区2区3区| 欧美大片顶级少妇| 成人av免费观看| 亚洲一区二区三区四区不卡| 91精品国产高清一区二区三区蜜臀| 韩国三级电影一区二区| 亚洲色图.com| 69久久夜色精品国产69蝌蚪网| 国产精品一二二区|