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

📄 sendgetdst.c

📁 Linux下的socks的程序源程序,用于socks的代理服务
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -