sendgetdst.c

来自「Linux下的socks的程序源程序,用于socks的代理服务」· C语言 代码 · 共 104 行

C
104
字号
#include <sys/types.h>#if defined(ISC)#include <sys/bsdtypes.h>#endif /* #if defined(ISC) */#include <sys/time.h>#include "socks.h"#include <syslog.h>#include <sys/errno.h>#if defined(ISC)#include <net/errno.h>#endif /* #if defined(ISC) */extern int errno;#define NULL ((char *)0)int socks_SendDst(s, dst)int	s;Socks_t	*dst;{	char c[sizeof(Socks_t)];	char *p = c;	int i = sizeof(Socks_t), n, ret;	fd_set	fds;	int	fdsbits = s + 1;	struct	timeval timeout;	c[0] = dst->version;	c[1] = dst->cmd;	bcopy(&dst->port, c+2, sizeof(dst->port));	bcopy(&dst->host, c+2+sizeof(dst->port), sizeof(dst->host));	while ( i > 0) {		FD_ZERO(&fds);		FD_SET(s, &fds);		timeout.tv_sec = 15;		timeout.tv_usec = 0;		if ((ret = select(fdsbits, NULL, &fds, NULL, &timeout)) == 0)			continue;		if (ret < 0) {			if (errno == EINTR)				continue;			else {				syslog(LOG_LOW, "select() in socks_SendDst(): %m");				return(-1);			}		}		if((n = write(s, p, i)) > 0) {			p += n;			i -= n;		} else if ((n < 0) && ((errno == EWOULDBLOCK) || (errno == EINTR)))			continue;		else {			syslog(LOG_LOW, "write() in socks_SendDst(): %m");			return (-2);		}	}	return(0);}int socks_GetDst(s, dst)int	s;Socks_t	*dst;{	char	c[sizeof(Socks_t)];	char	*p = c;	int	i = sizeof(Socks_t), n, ret;	fd_set	fds;	int	fdsbits = s + 1;	struct	timeval timeout;	while ( i > 0) {		FD_ZERO(&fds);		FD_SET(s, &fds);		timeout.tv_sec = 15;		timeout.tv_usec = 0;		if ((ret = select(fdsbits, &fds, NULL, NULL, &timeout)) == 0)			continue;		if (ret < 0) {			if (errno == EINTR)				continue;			else {					syslog(LOG_LOW, "select() in socks_GetDst(): %m");			return(-1);			}		}		if((n = read(s, p, i)) > 0) {			p += n;			i -= n;		} else if ((n < 0) && ((errno == EWOULDBLOCK) || (errno == EINTR)))			continue;		else {			syslog(LOG_LOW, "read() in socks_GetDst(): %m");			return(-2);		}	}	dst->version = c[0];	dst->cmd = c[1];	bcopy(c+2, &dst->port, sizeof(dst->port));	bcopy(c+2+sizeof(dst->port), &dst->host, sizeof(dst->host));	return(0);}

⌨️ 快捷键说明

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