穿越防火墙技术代码

源代码在线查看: poll.c

软件大小: 255 K
上传用户: dingjuan_01
关键词: 防火墙 代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*				port/poll.c								Copyright (C) 1999 Lars Brinkhoff.  See COPYING for terms and conditions.				*/								#include "config.h"								#ifndef HAVE_POLL								#include 				#include 				#include 				#include 								#ifndef HAVE_SELECT				#error "Must have either poll() or select()."				#endif								int				poll (struct pollfd *p, int n, int t)				{				  struct timeval t2, *t3;				  fd_set r, w, e;				  int i, m, ret;								  FD_ZERO (&r);				  FD_ZERO (&w);				  FD_ZERO (&e);				  m = -1;				  for (i = 0; i < n; i++)				    {				      if (p[i].fd < 0)					continue;				      if (p[i].events & POLLIN)				        FD_SET (p[i].fd, &r);				      if (p[i].events & POLLOUT)				        FD_SET (p[i].fd, &w);				      FD_SET (p[i].fd, &e); /* or something */				      if (p[i].fd > m)				        m = p[i].fd;				    }								  if (m == -1)				    return 0;								  if (t < 0)				    t3 = NULL;				  else				    {				      t2.tv_sec = t / 1000;				      t2.tv_usec = 1000 * (t % 1000);				      t3 = &t2;				    }								  ret = select (m + 1, &r, &w, &e, t3);								  if (ret != -1)				    for (i = 0; i < n; i++)				      {					p[i].revents = 0;					if (FD_ISSET (p[i].fd, &r))					  p[i].revents |= POLLIN;					if (FD_ISSET (p[i].fd, &w))					  p[i].revents |= POLLOUT;					if (FD_ISSET (p[i].fd, &e))					  p[i].revents |= POLLERR; /* or something */				      }								  return ret;				}								#endif /* HAVE_POLL */							

相关资源