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

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

?? socket.c

?? 一個開源的VPN原碼
?? C
字號:
/* *  OpenVPN -- An application to securely tunnel IP networks *             over a single UDP port, with support for TLS-based *             session authentication and key exchange, *             packet encryption, packet authentication, and *             packet compression. * *  Copyright (C) 2002 James Yonan <jim@yonan.net> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program (see the file COPYING included with this *  distribution); if not, write to the Free Software Foundation, Inc., *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "config.h"#include "syshead.h"#include "socket.h"#include "fdmisc.h"#include "error.h"#include "thread.h"#include "misc.h"#include "memdbg.h"#define INETD_SOCKET_DESCRIPTOR 0static const char*h_errno_msg(int h_errno_err){  switch (h_errno_err)    {    case HOST_NOT_FOUND:      return "[HOST_NOT_FOUND] The specified host is unknown.";    case NO_DATA:      return "[NO_DATA] The requested name is valid but does not have an IP address.";    case NO_RECOVERY:      return "[NO_RECOVERY] A non-recoverable name server error occurred.";    case TRY_AGAIN:      return "[TRY_AGAIN] A temporary error occurred on an authoritative name server.";    }  return "[unknown h_errno value]";}/* * Translate IP addr or hostname to in_addr_t. * If resolve error, try again for * resolve_retry_seconds seconds. */static in_addr_tgetaddr (const char *hostname, int resolve_retry_seconds){  const int fail_wait_interval = 5; /* seconds */  int resolve_retries = resolve_retry_seconds / fail_wait_interval;  in_addr_t ip = inet_addr (hostname);  if (ip == -1)    {      /*       * Resolve hostname       */      struct hostent *h;      while ( !(h = gethostbyname (hostname)) )	{	  msg ((resolve_retries > 0  ? D_RESOLVE_ERRORS : M_FATAL),	       "Cannot resolve host address: %s: %s",	       hostname, h_errno_msg (h_errno));	  sleep (fail_wait_interval);	  --resolve_retries;	}      /* potentially more than one address returned, but we take first */      ip = *(in_addr_t *) (h->h_addr_list[0]);      if (ip)	{	  if (h->h_addr_list[1])	    msg (M_WARN, "Warning: %s has multiple addresses", hostname);	}    }  return ip;}/* Create a UDP socket */voidudp_socket_init (struct udp_socket *sock,		 const char *local_host,		 const char *remote_host,		 int local_port,		 int remote_port,		 bool bind_local,		 bool remote_float,		 bool inetd,		 struct udp_socket_addr *usa,		 const char *ipchange_command,		 int resolve_retry_seconds){  CLEAR (*sock);  sock->remote_float = remote_float;  sock->addr = usa;  sock->ipchange_command = ipchange_command;  /* were we started by inetd or xinetd? */  if (inetd)    {      sock->sd = INETD_SOCKET_DESCRIPTOR;    }  else    {      /* create socket */      if ((sock->sd = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)	msg (M_ERR, "Cannot create socket");      /* resolve local address if undefined */      if (!addr_defined (&usa->local))	{	  usa->local.sin_family = AF_INET;	  usa->local.sin_addr.s_addr =	    (local_host ? getaddr (local_host, resolve_retry_seconds) : htonl (INADDR_ANY));	  usa->local.sin_port = htons (local_port);	}      /* bind to local address/port */      if (bind_local)	{	  if (bind (sock->sd, (struct sockaddr *) &usa->local, sizeof (usa->local)))	    msg (M_ERR, "Socket bind failed on local address: %s",		 print_sockaddr (&usa->local));	}    }  /* resolve remote address if undefined */  if (!addr_defined (&usa->remote))    {      usa->remote.sin_family = AF_INET;      usa->remote.sin_addr.s_addr =	(remote_host ? getaddr (remote_host, resolve_retry_seconds) : 0);      usa->remote.sin_port = htons (remote_port);    }  /* should we re-use previous active remote address? */  if (addr_defined (&usa->actual))    msg (M_INFO, "Preserving recently used remote address: %s", print_sockaddr (&usa->actual));  else    usa->actual = usa->remote;  /* set socket to non-blocking mode */  set_nonblock (sock->sd);  /* print local and active remote address */  if (sock->sd == INETD_SOCKET_DESCRIPTOR)    msg (M_INFO, "UDP link local: [inetd]");  else    msg (M_INFO, "UDP link local%s: %s", (bind_local ? " (bound)" : ""),	 print_sockaddr_ex (&usa->local, bind_local, ":"));  msg (M_INFO, "UDP link remote: %s",       print_sockaddr_ex (&usa->actual, addr_defined (&usa->actual), ":"));}voidudp_socket_set_outgoing_addr (const struct buffer *buf,			      struct udp_socket *sock,			      const struct sockaddr_in *addr){  mutex_lock (L_SOCK);  if (!buf || buf->len > 0)    {      struct udp_socket_addr *usa = sock->addr;      ASSERT (addr_defined (addr));      if ((sock->remote_float	   || !addr_defined (&usa->remote)	   || addr_match (addr, &usa->remote))	  && (!addr_match (addr, &usa->actual)	      || !sock->set_outgoing_initial))	{	  usa->actual = *addr;	  sock->set_outgoing_initial = true;	  mutex_unlock (L_SOCK);	  msg (M_INFO, "Peer Connection Initiated with %s", print_sockaddr (&usa->actual));	  if (sock->ipchange_command)	    {	      char command[256];	      struct buffer out;	      buf_set_write (&out, command, sizeof (command));	      buf_printf (&out, "%s %s",			  sock->ipchange_command,			  print_sockaddr_ex (&usa->actual, true, " "));	      msg (D_TLS_DEBUG, "executing ip-change command: %s", command);	      system_check (command, "ip-change command failed", false);	    }	  mutex_lock (L_SOCK);	}    }  mutex_unlock (L_SOCK);}voidudp_socket_incoming_addr (struct buffer *buf,			  const struct udp_socket *sock,			  const struct sockaddr_in *from_addr){  mutex_lock (L_SOCK);  if (buf->len > 0)    {      struct udp_socket_addr *usa = sock->addr;      if (from_addr->sin_family != AF_INET)	goto bad;      if (!addr_defined (from_addr))	goto bad;      if (!addr_defined (&usa->remote) || sock->remote_float)	goto good;      if (addr_match (from_addr, &usa->remote))	goto good;    }bad:  msg (D_LINK_ERRORS,       "IP Address failed from %s (allow this incoming address/port by removing --remote or adding --float)",       print_sockaddr (from_addr));  buf->len = 0;  mutex_unlock (L_SOCK);  return;good:  msg (D_READ_WRITE, "IP Address OK from %s",       print_sockaddr (from_addr));  mutex_unlock (L_SOCK);  return;}voidudp_socket_get_outgoing_addr (struct buffer *buf,			      const struct udp_socket *sock,			      struct sockaddr_in *addr){  mutex_lock (L_SOCK);  if (buf->len > 0)    {      struct udp_socket_addr *usa = sock->addr;      if (addr_defined (&usa->actual))	{	  *addr = usa->actual;	}      else	{	  msg (D_READ_WRITE, "No outgoing address to send packet");	  buf->len = 0;	}    }  mutex_unlock (L_SOCK);}voidudp_socket_close (struct udp_socket *sock){  if (sock->sd >= 0 && sock->sd != INETD_SOCKET_DESCRIPTOR)    {      close (sock->sd);      sock->sd = -1;    }}const char *print_sockaddr (const struct sockaddr_in *addr){  return print_sockaddr_ex(addr, true, ":");}const char *print_sockaddr_ex (const struct sockaddr_in *addr, bool do_port, const char* separator){  struct buffer out = alloc_buf_gc (64);  const int port = ntohs (addr->sin_port);  mutex_lock (L_INET_NTOA);  buf_printf (&out, "%s", (addr_defined (addr) ? inet_ntoa (addr->sin_addr) : "[undef]"));  mutex_unlock (L_INET_NTOA);  if (do_port && port)    {      if (separator)	buf_printf (&out, "%s", separator);      buf_printf (&out, "%d", port);    }  return out.data;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩视频在线第一区| 精品日韩一区二区| 日韩三级伦理片妻子的秘密按摩| 国产欧美日韩三级| 亚洲一二三区视频在线观看| 国产精品1区2区3区在线观看| 91麻豆国产在线观看| 久久久影视传媒| 奇米影视在线99精品| 日本精品免费观看高清观看| 久久精品一区二区三区四区| 成人中文字幕在线| 欧美一区二区三区不卡| 亚洲一区二区三区视频在线播放| 国产一区视频在线看| 欧美一区二区视频在线观看2020| 一区二区久久久久久| a4yy欧美一区二区三区| 久久九九国产精品| 国产一区啦啦啦在线观看| 91精品国产美女浴室洗澡无遮挡| 亚洲国产另类精品专区| 一本大道av一区二区在线播放 | 91麻豆国产精品久久| www激情久久| 精品亚洲国产成人av制服丝袜| 欧美人伦禁忌dvd放荡欲情| 一区二区三区精密机械公司| 99国产精品一区| 亚洲免费观看高清| 色综合天天综合在线视频| 一区精品在线播放| 99麻豆久久久国产精品免费| 国产精品欧美久久久久无广告| 风间由美一区二区三区在线观看 | 不卡的av中国片| 国产精品天美传媒| 成人黄色a**站在线观看| 国产日韩精品久久久| 国产精品小仙女| 欧美激情一区二区| 91原创在线视频| 一区二区三区美女视频| 欧美三片在线视频观看| 国产·精品毛片| 亚洲欧美综合网| 欧美亚洲国产一区二区三区va| 樱花影视一区二区| 91精品国产综合久久小美女| 麻豆91在线看| 久久久噜噜噜久久中文字幕色伊伊 | 久久超级碰视频| 国产精品热久久久久夜色精品三区| 成人午夜av电影| 亚洲精品免费在线| 欧美一区二区精品在线| 国模大尺度一区二区三区| 国产精品美女久久久久av爽李琼| 91久久香蕉国产日韩欧美9色| 亚洲午夜av在线| 亚洲精品一区二区三区四区高清| 国产91色综合久久免费分享| 一区二区三区欧美日| 欧美福利视频一区| 国产精品性做久久久久久| 一区二区三区在线视频观看58| 91精品国产色综合久久ai换脸| 国产成人免费av在线| 亚洲一区二区三区四区中文字幕| 精品欧美久久久| 91小视频在线免费看| 美女视频网站久久| 亚洲日穴在线视频| 日韩久久免费av| 在线看国产一区二区| 精品一区二区三区视频在线观看| 亚洲人成亚洲人成在线观看图片 | 亚洲综合色噜噜狠狠| 日韩欧美国产成人一区二区| 国产白丝精品91爽爽久久| 一区免费观看视频| 2021中文字幕一区亚洲| 在线观看网站黄不卡| 极品少妇xxxx偷拍精品少妇| 亚洲一级二级在线| 国产精品三级在线观看| 日韩亚洲国产中文字幕欧美| 99久久er热在这里只有精品66| 久久国产综合精品| 天天免费综合色| 亚洲日本在线天堂| 中文字幕精品综合| 久久久久久久综合| 欧美岛国在线观看| 制服丝袜中文字幕一区| 色屁屁一区二区| 99久久99久久精品免费看蜜桃| 久久99日本精品| 日韩精品色哟哟| 亚洲成人午夜影院| 玉米视频成人免费看| 亚洲视频 欧洲视频| 中文字幕乱码亚洲精品一区| 精品久久久久久久久久久久久久久 | 亚洲天天做日日做天天谢日日欢| 久久久精品免费网站| 日韩欧美123| 亚洲一区二区综合| 亚洲人快播电影网| 中文字幕中文字幕一区| 国产欧美日本一区视频| 国产欧美一区二区在线观看| 久久综合九色综合欧美亚洲| 精品久久人人做人人爰| 精品日韩一区二区| 国产午夜亚洲精品理论片色戒| 亚洲精品一区二区三区香蕉| 国产午夜亚洲精品羞羞网站| 国产校园另类小说区| 欧美国产成人在线| 中文字幕av一区 二区| 国产精品系列在线| 亚洲男人电影天堂| 亚洲激情图片一区| 亚洲一本大道在线| 日韩黄色免费网站| 国产在线精品一区在线观看麻豆| 激情综合色播激情啊| 国产福利视频一区二区三区| 国产成人av电影在线观看| www.欧美日韩国产在线| 91黄色激情网站| 91精品蜜臀在线一区尤物| 精品福利一区二区三区免费视频| 久久无码av三级| 亚洲人一二三区| 婷婷开心久久网| 黑人巨大精品欧美黑白配亚洲| 国产成人精品一区二区三区四区| 成人午夜视频网站| 欧美日韩一区不卡| 欧美成人免费网站| 中文字幕视频一区| 亚洲国产精品久久久久秋霞影院| 美女一区二区久久| 97久久超碰国产精品电影| 欧美日韩亚洲综合一区二区三区| 欧美一区二区免费观在线| 国产午夜亚洲精品午夜鲁丝片| 亚洲欧美日韩一区二区| 免费观看30秒视频久久| av欧美精品.com| 欧美一激情一区二区三区| 国产精品网站一区| 亚洲gay无套男同| 国产精品一级片| 欧美亚男人的天堂| 国产欧美一区二区精品性色超碰| 亚洲国产精品一区二区www| 国产一区二区伦理片| 欧美午夜不卡视频| 国产欧美一区二区在线| 日韩av网站在线观看| 99国产一区二区三精品乱码| 日韩欧美久久一区| 亚洲一区在线观看免费 | 26uuu另类欧美| 亚洲综合激情另类小说区| 国产一区二区免费视频| 欧美日韩成人综合| 亚洲视频免费在线观看| 国产成人一级电影| 日韩一区二区三区免费看| 亚洲欧美日本在线| 福利一区福利二区| 26uuu精品一区二区| 午夜精品福利一区二区蜜股av| 97久久超碰国产精品电影| 久久精品一区四区| 激情成人综合网| 91精品国产一区二区三区香蕉| 一区二区三区在线视频观看58| 成人综合婷婷国产精品久久蜜臀| 精品国产一区二区三区忘忧草| 亚洲va国产天堂va久久en| 91麻豆精品秘密| 亚洲婷婷在线视频| 99视频精品在线| 成人欧美一区二区三区白人| 国产91对白在线观看九色| 久久久.com| 国产精品资源在线看| 欧美mv和日韩mv的网站| 美腿丝袜亚洲一区| 欧美电影在哪看比较好| 五月天激情综合| 91精品婷婷国产综合久久性色| 日韩中文欧美在线| 日韩欧美一区二区在线视频| 日本怡春院一区二区|