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

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

?? unix2tcp.c

?? unix接口轉換為tcp接口
?? C
字號:
/*  * Copyright (C) 2002,2003  Mihai RUSU (dizzy@roedu.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; if not, write to the Free Software  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.*/#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/stat.h>#include <sys/un.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <fcntl.h>#include <signal.h>#include <errno.h>#include <string.h>#include "list.h"#include "unix2tcp.h"/* Global Variable Definitions */static int listensock;static struct sockaddr_in raddr;static char *unixpath;static fd_set trfds, twfds;static int maxsocket = 0, findmax;static t_list *connlist = NULL;volatile static int quitasap = 0;static void dostop(int);static void usage(void);static void packet_destroy(t_packet *);/* Connection handling routines */static int connection_new(int);static int connection_establish(t_connection *);static void connection_destroy(t_connection *);static int socket_nonblock(int);static int init_socket(char *, char *, char *);static void close_socket(void);static int server_read(t_mysocket *, t_mysocket *);static int server_write(t_mysocket *);static void mainloop(void);int main(int argc, char **argv){   if (argc != 4) usage();   signal(SIGINT, dostop);   signal(SIGTERM, dostop);   fprintf(stderr, "STARTUP\n");   if (init_socket(argv[1], argv[2], argv[3]) < 0) {      printf("Error in init_socket()!\n");      return -1;   }   mainloop();   close_socket();   fprintf(stderr, "SHUTDOWN\n");   return 0;}static int init_socket(char *upath, char *remoteip, char *remoteport){   struct sockaddr_un unixaddr;      if (upath == NULL || remoteip == NULL || remoteport == NULL) return -1;      if (inet_aton(remoteip, &raddr.sin_addr) == 0) return -1;      raddr.sin_family = AF_INET;   raddr.sin_port = htons(atoi(remoteport));   unixpath = upath;      listensock = socket(PF_UNIX, SOCK_STREAM, 0);   if (listensock < 0) {      fprintf(stderr, "Error doing socket()\n");      return -1;   }      if (socket_nonblock(listensock) < 0) {      fprintf(stderr, "Error trying to set O_NONBLOCK\n");      close(listensock);      return -1;   }   unixaddr.sun_family = AF_UNIX;   strcpy(unixaddr.sun_path, unixpath);   if (bind(listensock, (struct sockaddr *)&unixaddr, sizeof(unixaddr))) {      fprintf(stderr, "Error doing bind()\n");      close(listensock);      return -1;   }   if (chmod(unixpath, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH) < 0) {      fprintf(stderr, "Error chmod() (%s)\n", strerror(errno));      close(listensock);      return -1;   }   if (listen(listensock, 5)) {      printf("Eroare doing listen()\n");      close(listensock);      unlink(unixpath);      return -1;   }      FD_ZERO(&trfds); FD_ZERO(&twfds);   FD_SET(listensock, &trfds);   if (maxsocket < listensock) maxsocket = listensock;      findmax = 100;   return 0;}static void close_socket(void){   t_list_elem *elem;      /* FIXME: close all incoming/outgoing connections */   if (listensock) close(listensock);   unlink(unixpath);   if (connlist) {      for(elem = LIST_FIRST(connlist); elem ; elem = LIST_NEXT(elem)) {	 t_connection *c = elem_get_data(elem);	 if (c) connection_destroy(c);	 else fprintf(stderr, "close_socket : found NULL entry in conn list\n");      }      list_free(connlist);      connlist = NULL;   }   FD_ZERO(&trfds); FD_ZERO(&twfds);}static void mainloop(void){   fd_set rfds, wfds;   int res;   t_list_elem *elem, *next;   if (connlist == NULL && (connlist = list_init()) == NULL) return;   while(!quitasap) {      memmove(&rfds, &trfds, sizeof(fd_set));      memmove(&wfds, &twfds, sizeof(fd_set));      res = select(maxsocket + 1, &rfds, &wfds, NULL, NULL);      if (res == 0)	fprintf(stderr, "mainloop() : select returned with 0 fds!\n");      else if (res < 0)	switch(errno) {	 case EINTR: /* got signal */	   break;	 default:	   fprintf(stderr, "mainloop() : got error in select()(%s)\n", strerror(errno));	}      else {	 if (FD_ISSET(listensock, &rfds)) {	    int newsock;	    struct sockaddr addr;	    socklen_t size;	    	    memset(&addr, 0, sizeof(addr));	    size = 0;	    newsock = accept(listensock, &addr, &size);	    if (newsock < 0)	      switch(errno) {	       case EAGAIN:		 fprintf(stderr, "mainloop() : select returned rdy but accept() would block\n");		 break;	       default:		 fprintf(stderr, "mainloop() : got error in accept()(%s)\n", strerror(errno));	      }	    else if (connection_new(newsock) < 0)	       /* could not creat the proxy connection, close the source */	      close(newsock);	 }	 	 for(elem = LIST_FIRST(connlist); elem ; elem = next) {	    t_connection *c = elem_get_data(elem);	    next = LIST_NEXT(elem);	    if (c) {	       res = 0;	       if (FD_ISSET(c->in.sock, &rfds)) res = server_read(&c->in, &c->out);	       if (res == 0 && FD_ISSET(c->in.sock, &wfds)) res = server_write(&c->in);	       if (res == 0 && FD_ISSET(c->out.sock, &rfds)) res = server_read(&c->out, &c->in);	       if (res == 0 && FD_ISSET(c->out.sock, &wfds)) {		  if (c->inprogress) res = connection_establish(c);		  else res = server_write(&c->out);	       }	       if (res < 0) quitasap = 1;	       else if (res > 0) {		  connection_destroy(c);		  list_delete_by_elem(connlist, elem);	       }	    } else fprintf(stderr, "mainloop() : got NULL entry in in_conn list\n");	 }      }   }}static int server_read(t_mysocket *in, t_mysocket *out){   static char buffer[4096];   t_packet *packet;   int res, len;   if (in == NULL || out == NULL) {      fprintf(stderr, "server_read : Got NULL in/out sockets\n");      return -1;   }   res = read(in->sock, buffer, sizeof(buffer));   if (res < 0) {      switch(errno) {       case EAGAIN: /* no data available */       case EINTR: /* call was interupted by a signel before any data was read */	 return 0;       case ECONNRESET:	 return 1;       default:	 fprintf(stderr, "server_read : got error in read() (%s)\n", strerror(errno));	 return -1;      }   }   if (res == 0) return 1; /* connection closed by peer */   res = write(out->sock, buffer, len = res);   if (res == len) return 0;   if (res < 0) {      switch(errno) {       case EPIPE: /* connection closed */       case ECONNRESET:	 return 1;       case EAGAIN: /* would block */       case EINTR: /* interupted in write() */	 break;       default: 	 fprintf(stderr, "server_read : error in write() (%s)\n", strerror(errno));	 return -1;      }   } else if (res && res < len) { /* sent a part of original data */      len -= res;      memmove(buffer, buffer + res, len);   }   /* could not send read data, so we queue it for later send */   if (out->outqueue == NULL && (out->outqueue = list_init()) == NULL) {      fprintf(stderr, "server_read : could not init the outqueue\n");      return -1;   }   if ((packet = malloc(sizeof(t_packet))) == NULL) {      fprintf(stderr, "server_read : could not allocate new packet\n");      return -1;   }      if ((packet->data = malloc(len)) == NULL) {      fprintf(stderr, "server_read : could not allocate for data\n");      free(packet);      return -1;   }   memmove(packet->data, buffer, len);   packet->len = len;   if (list_append_data(out->outqueue, packet) < 0) {      fprintf(stderr, "server_read : could not append packet to out\n");      free(packet->data);      free(packet);      return -1;   }   FD_SET(out->sock, &twfds); /* next select() will need to check for writing */   return 0;}static int server_write(t_mysocket *con){   int res;   t_list_elem *elem;   t_packet *packet;      if (con == NULL) {      fprintf(stderr, "server_write : got NULL con\n");      return -1;   }   if (con->outqueue == NULL) {      fprintf(stderr, "server_write : got NULL outqueue\n");      return -1;   }   elem = LIST_FIRST(con->outqueue);   if (elem == NULL) {      fprintf(stderr, "server_write : outqueue is empty\n");      return -1;   }      packet = elem_get_data(elem);   if (packet == NULL || packet->data == NULL) {      fprintf(stderr, "server_write : found NULL packet in outqueue\n");      return -1;   }      res = write(con->sock, packet->data, packet->len);   if (res < 0) {      switch(errno) {       case EPIPE: /* connection closed */       case ECONNRESET:	 return 1;       case EAGAIN: /* would block */       case EINTR: /* interupted in write() */	 return 0;       default: 	 fprintf(stderr, "server_write : error in write() (%s)\n", strerror(errno));	 return -1;      }   }   if (!res) return 0; /* nothing written */   if (res < packet->len) { /* we wrote fewer bytes than requested */      memmove(packet->data, (char *)packet->data + res, packet->len - res);      packet->len -= res;      return 0;   }   packet_destroy(packet);   if (list_delete_by_elem(con->outqueue, elem) < 0) {      fprintf(stderr, "server_write : could not remove sent packet from outqueue\n");      return -1;   }   /* outqueue is empty so next select() wont need to check for write */   if (list_get_size(con->outqueue) == 0) FD_CLR(con->sock, &twfds);    return 0;}static int connection_new(int newsock){   t_connection *c;   int outsock;   if (connlist == NULL) return -1;   if (newsock < 1) {      fprintf(stderr, "connection_new() : got invalid socket\n");      return -1;   }   c = malloc(sizeof(t_connection));   if (c == NULL) {      fprintf(stderr, "connection_new() : could not allocate for new connections\n");      return -1;   }   outsock = socket(PF_INET, SOCK_STREAM, 0);   if (outsock < 1) {      fprintf(stderr, "connection_new() : could not create new socket\n");      free(c);      return -1;   }      if (socket_nonblock(outsock) < 0) {      fprintf(stderr, "connection_new() : could not set O_NONBLOCK on socket\n");      free(c);      close(outsock);      return -1;   }      if (connect(outsock, (struct sockaddr *) &raddr, sizeof(raddr))) {      switch(errno) {       case EINPROGRESS: /* note a in progress connection */	 c->inprogress = 1;	 break;       default:	 fprintf(stderr, "connection_new() : could not connect()(%s)\n", strerror(errno));	 close(outsock);	 free(c);	 return -1;      }   } else c->inprogress = 0;   c->in.sock = newsock;   c->in.outqueue = NULL;   c->out.sock = outsock;   c->out.outqueue = NULL;   if (list_append_data(connlist, c) < 0) {      fprintf(stderr, "connection_new() : could not append new connection to list\n");      close(outsock);      free(c);      return -1;   }   if (maxsocket < c->in.sock) maxsocket = c->in.sock;   if (maxsocket < c->out.sock) maxsocket = c->out.sock;   if (!c->inprogress) { /* connection fully established */      FD_SET(c->in.sock, &trfds);      FD_SET(c->out.sock, &trfds);   } else FD_SET(c->out.sock, &twfds); /* connection in progress, wait for write */   return 0;}static int connection_establish(t_connection *c){   int error;   socklen_t len;   if (c == NULL) {      fprintf(stderr, "connection_establish() : found NULL connection\n");      return -1;   }   if (!c->inprogress || c->out.sock <= 0) {      fprintf(stderr, "connection_establish() : got invalid connection\n");      return -1;   }   len = sizeof(error);   if (getsockopt(c->out.sock, SOL_SOCKET, SO_ERROR, &error, &len) < 0) {      fprintf(stderr, "connection_establish() : could not getsockopt()\n");      return -1;   }   if (error) /* could not establish remote connection */     return 1; /* close this connection */      c->inprogress = 0; /* connection established */   FD_CLR(c->out.sock, &twfds);   FD_SET(c->in.sock, &trfds); FD_SET(c->out.sock, &trfds);   return 0;}static void connection_destroy(t_connection *c){   t_list_elem *elem;   t_packet *packet;   if (c == NULL) return;   close(c->in.sock);   close(c->out.sock);   FD_CLR(c->in.sock, &trfds); FD_CLR(c->out.sock, &trfds);   FD_CLR(c->in.sock, &twfds); FD_CLR(c->out.sock, &twfds);   if (--findmax == 0) {      t_connection *con;      maxsocket = listensock;      for(elem = LIST_FIRST(connlist); elem; elem = LIST_NEXT(elem)) {	 con = elem_get_data(elem);	 	 if (con && con != c) {	    if (con->in.sock > maxsocket) maxsocket = con->in.sock;	    if (con->out.sock > maxsocket) maxsocket = con->out.sock;	 }      }      findmax = 100;   }      if (c->in.outqueue) {      for(elem = LIST_FIRST(c->in.outqueue); elem; elem = LIST_NEXT(elem)) {	 packet = elem_get_data(elem);	 	 if (packet) packet_destroy(packet);	 else fprintf(stderr, "connection_destroy : found NULL entry in outqueue\n");      }      list_free(c->in.outqueue);   }   if (c->out.outqueue) {      for(elem = LIST_FIRST(c->out.outqueue); elem; elem = LIST_NEXT(elem)) {	 packet = elem_get_data(elem);	 	 if (packet) packet_destroy(packet);	 else fprintf(stderr, "connection_destroy : found NULL entry in outqueue\n");      }      list_free(c->out.outqueue);   }      free(c);}static void packet_destroy(t_packet *packet){   if (packet == NULL) return;      if (packet->data) free(packet->data);   free(packet);}static int socket_nonblock(int fd){   int flags;   flags = fcntl(fd, F_GETFL);   if (flags < 0) return -1;   flags |= O_NONBLOCK;   if (fcntl(fd, F_SETFL, flags) < 0) return -1;   return 0;}static void usage(void){   printf("Usage: unix2tcp <unix-socket> <remote-ip> <remote-port>\n");   exit(-1);}static void dostop(int n){   quitasap = 1;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品99久久久久久久久| 国产成人自拍高清视频在线免费播放| 91极品美女在线| 国产精品一级片| 国产精品一区二区在线观看网站| 欧美国产乱子伦| 国产农村妇女毛片精品久久麻豆| 91蝌蚪porny| 91蜜桃免费观看视频| 99在线精品观看| 91麻豆国产福利在线观看| 97国产精品videossex| 色综合久久中文字幕| 欧美亚洲国产一区二区三区| 一本久久a久久精品亚洲| 91丨九色丨蝌蚪富婆spa| 精品污污网站免费看| 日韩一区二区三区四区五区六区| 91日韩精品一区| 色综合视频一区二区三区高清| 另类小说一区二区三区| 日韩国产精品大片| 韩国在线一区二区| 成人精品电影在线观看| 一本久道久久综合中文字幕| 91福利区一区二区三区| 日韩欧美一二三四区| 久久久久久久久久美女| 国产精品久久影院| 一卡二卡欧美日韩| 精品一区二区在线播放| 欧美经典一区二区| 亚洲免费伊人电影| 青草av.久久免费一区| 国产美女在线观看一区| 日本道免费精品一区二区三区| 国产一本一道久久香蕉| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美日韩1234| 欧美精品一区二区三区蜜桃视频 | 日韩一区欧美一区| 午夜视频在线观看一区| 精品一区二区在线看| 色噜噜偷拍精品综合在线| 日韩一卡二卡三卡四卡| 中文字幕五月欧美| 婷婷开心久久网| 国产成人aaa| 欧美少妇xxx| 国产欧美日韩三级| 日本三级亚洲精品| 成人动漫中文字幕| 日韩欧美国产精品| 亚洲少妇30p| 激情综合色播五月| 色婷婷一区二区| 国产亚洲精品超碰| 香蕉乱码成人久久天堂爱免费| 一区二区三区欧美激情| 国产一区在线精品| 欧美日韩一区三区| 国产精品妹子av| 精品一区二区三区香蕉蜜桃| 在线精品视频一区二区三四| 久久久久久99久久久精品网站| 精品国产免费人成在线观看| 亚洲最大的成人av| 国产激情一区二区三区桃花岛亚洲| 国产凹凸在线观看一区二区| 91 com成人网| 一区二区三区日韩在线观看| 波多野结衣精品在线| 这里只有精品免费| 亚洲色图视频网| 成人综合激情网| 欧美成人video| 午夜一区二区三区视频| 99re热视频这里只精品| 久久久国产综合精品女国产盗摄| 国产精品区一区二区三| 久久精品99国产国产精| 欧美揉bbbbb揉bbbbb| 日韩伦理av电影| 成人性视频网站| 国产亚洲欧美一区在线观看| 久久草av在线| 欧美精品在线观看一区二区| 一区二区三区在线视频观看| 97se亚洲国产综合自在线不卡| 欧美日韩在线观看一区二区| 亚洲免费视频中文字幕| 97精品视频在线观看自产线路二| 中文字幕在线不卡视频| 国产一区在线视频| 久久久国产精品午夜一区ai换脸| 亚洲九九爱视频| aaa欧美大片| 中文字幕巨乱亚洲| 成人免费视频一区二区| 国产亚洲欧美日韩在线一区| 国产成人精品影院| 国产精品热久久久久夜色精品三区| 亚洲综合丁香婷婷六月香| 成年人午夜久久久| 综合电影一区二区三区| 99久免费精品视频在线观看| 综合激情成人伊人| 色激情天天射综合网| 亚洲精品va在线观看| 欧美自拍偷拍一区| 亚洲成av人片一区二区梦乃| 欧美日韩在线直播| 免费高清成人在线| 精品欧美久久久| 国产91精品一区二区麻豆网站| 欧美日韩国产美女| 日本伊人午夜精品| 91精品国产丝袜白色高跟鞋| 麻豆精品一区二区三区| 久久一区二区三区四区| 大胆欧美人体老妇| 一区二区三区在线播| 欧美日韩一区二区欧美激情| 日本亚洲免费观看| 国产日韩欧美一区二区三区综合| 亚洲国产sm捆绑调教视频| 欧美喷潮久久久xxxxx| 视频一区二区不卡| 亚洲精品一线二线三线无人区| 午夜私人影院久久久久| 制服丝袜国产精品| 精品无人区卡一卡二卡三乱码免费卡| 在线视频国内一区二区| 日本不卡在线视频| 国产女同互慰高潮91漫画| 成人av资源站| 午夜精品在线看| 精品国产乱码久久久久久牛牛| 图片区小说区国产精品视频| 2021国产精品久久精品 | 91视视频在线观看入口直接观看www| 久久综合色鬼综合色| 99国产麻豆精品| 免费观看日韩av| 中文字幕一区二| 777精品伊人久久久久大香线蕉| 亚洲视频综合在线| 欧美一区二区日韩| 成人妖精视频yjsp地址| 婷婷久久综合九色综合绿巨人| 日本丰满少妇一区二区三区| 青青草一区二区三区| 国产精品国产自产拍高清av| 欧美人与禽zozo性伦| 国产成人小视频| 日日欢夜夜爽一区| 国产精品美女久久久久久久| 欧美一区二区网站| 99re视频这里只有精品| 日本美女视频一区二区| 日韩一区欧美小说| 精品国产1区2区3区| 欧美中文字幕一区二区三区 | 粉嫩一区二区三区在线看| 天天做天天摸天天爽国产一区| 欧美午夜精品一区| 国产69精品久久久久毛片| 日韩在线a电影| 一区二区三区影院| 久久久久国产成人精品亚洲午夜| 国产精品中文字幕一区二区三区| 久久综合久久99| 欧美喷潮久久久xxxxx| 成人看片黄a免费看在线| 麻豆精品久久精品色综合| 亚洲女子a中天字幕| 国产免费观看久久| 精品国产一区二区在线观看| 欧美情侣在线播放| 欧美亚洲动漫精品| av激情综合网| 国产盗摄精品一区二区三区在线 | 国产乱码精品一区二区三区忘忧草 | 欧美日韩免费一区二区三区视频 | 99久久伊人精品| 国内精品伊人久久久久av影院 | 2022国产精品视频| 91精品国产手机| 色美美综合视频| 91香蕉视频mp4| 97久久超碰精品国产| 福利一区二区在线| 国产成人aaa| 成人一区在线观看| 国产精品99久| 国产乱子轮精品视频| 国产精品一区二区x88av| 国产一区二区三区综合| 久久草av在线| 久久精品国内一区二区三区|