⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_wrap.c

📁 小型web服务器
💻 C
字号:
/* Author:eveson <eveson.hu@gmail.com>   website:http://eveson.cublog.cn  */  #include "net_wrap.h"void perr_exit(const char *s){	perror(s);	exit(1);}int Accept(int fd,struct sockaddr *sa,socklen_t *salenptr){	int n;again:	if ((n = accept(fd,sa,salenptr)) < 0)	{		if ((errno == ECONNABORTED) || (errno == EINTR))			goto again;		else 			perr_exit("accept error");	}	return n;}void Bind(int fd,const struct sockaddr *sa,socklen_t salen){	if (bind(fd,sa,salen) < 0)		perr_exit("bind error");}void Connect(int fd,const struct sockaddr *sa,socklen_t salen){	if (connect(fd,sa,salen) < 0)		perr_exit("conncet error");}void Listen(int fd,int backlog){	if (listen(fd,backlog) < 0)		perr_exit("listen error");}int Socket(int family,int type,int protocol){	int n;	if ((n = socket(family,type,protocol)) < 0)		perr_exit("socket error");	return n;}ssize_t Read(int fd,void *ptr,size_t nbytes){	ssize_t n;again:	if ((n = read(fd,ptr,nbytes)) == -1)	{		if (errno == EINTR)			goto again;		else			return -1;	}	return n;}ssize_t Write(int fd,void *ptr,size_t nbytes){	ssize_t n;again:	if ((n = write(fd,ptr,nbytes)) == -1)	{		if (errno == EINTR)			goto again;		else return -1;	}	return n;}ssize_t Readn(int fd,void *vptr,size_t n){	size_t nleft;	ssize_t nread;	char *ptr;	ptr = vptr;	nleft = n;	while (nleft > 0)	{		if ((nread = read(fd,ptr,nleft)) < 0)		{			if (errno == EINTR)				nread = 0;			else				return -1;		}		else		{			if (nread == 0)				break;		}		nleft -= nread;		ptr += nread;	}	return n - nleft;}ssize_t Writen(int fd,const void *vptr,size_t n){	size_t nleft;	ssize_t nwritten;	const char *ptr;	ptr = vptr;	nleft = n;	while (nleft > 0)	{		if ((nwritten == write(fd,ptr,nleft)) <= 0)		{			if (nwritten < 0 && errno == EINTR)				nwritten = 0;			else				return -1;		}		nleft -= nwritten;		ptr += nwritten;	}	return n;}static ssize_t my_read(int fd,char *ptr){	static int read_cnt;	static char *read_ptr;	static char read_buf[100];	if (read_cnt <= 0)	{again:		if ((read_cnt = read(fd,read_buf,sizeof(read_buf))) < 0)		{			if (errno == EINTR)				goto again;			return -1;		}		else if (read_cnt == 0)			return 0;		read_ptr = read_buf;	}	read_cnt--;	*ptr = *read_ptr++;	return 1;}ssize_t Readline(int fd,void *vptr,size_t maxlen){	ssize_t n,rc;	char c,*ptr;	ptr = vptr;	for (n = 0;n < maxlen;n++)	{		if ((rc = my_read(fd,&c)) == 1)		{			*ptr++ = c;			if (c == '\n')				break;		}		else if (rc == 0)		{			*ptr = 0;			return n - 1;		}		else			return -1;	}	*ptr = 0;	return n;}void Close(int fd){	if (close(fd) == -1)		perr_exit("close error");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -