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

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

?? select_test.cc

?? 介紹epoll
?? CC
字號:

#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <sys/time.h> 
#include <sys/types.h> 
#include <string.h> 
#include <signal.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h>
#include <errno.h> 

static int forward_port; 

#undef max 
#define max(x,y) ((x) > (y) ? (x) : (y)) 

static int listen_socket (int listen_port) 
{ 
    struct sockaddr_in a; 
    int s; 
    int yes; 
    if ((s = socket (AF_INET, SOCK_STREAM, 0)) < 0) 
	{ 
        perror ("socket"); 
        return -1; 
    } 
    yes = 1; 
    if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &yes, sizeof (yes)) < 0) 
	{ 
        perror ("setsockopt"); 
        close (s); 
        return -1; 
    } 
    memset (&a, 0, sizeof (a)); 

    a.sin_port = htons (listen_port); 
    a.sin_family = AF_INET; 
    if (bind(s, (struct sockaddr *) &a, sizeof (a)) < 0) 
	{ 
        perror ("bind"); 
        close (s); 
        return -1; 
    } 
    printf ("accepting connections on port %d\n", (int) listen_port); 
    listen (s, 10); 
    return s; 
} 

static int connect_socket (int connect_port, char *address) 
{ 
    struct sockaddr_in a; 
    int s; 
    if ((s = socket (AF_INET, SOCK_STREAM, 0)) < 0) 
	{ 
        perror ("socket"); 
        close (s); 
        return -1; 
    } 

    memset (&a, 0, sizeof (a)); 
    a.sin_port = htons (connect_port); 
    a.sin_family = AF_INET; 

    if (!inet_aton(address, (struct in_addr *) &a.sin_addr.s_addr)) 
	{ 
        perror ("bad IP address format"); 
        close (s); 
        return -1; 
    } 

    if (connect(s, (struct sockaddr *) &a, sizeof (a)) < 0) 
	{ 
        perror ("connect()"); 
        shutdown (s, SHUT_RDWR); 
        close (s); 
        return -1; 
    } 
    return s; 
} 

#define SHUT_FD1 { \ 
    if (fd1 >= 0) {   \ 
        shutdown (fd1, SHUT_RDWR);  \ 
        close (fd1);  \ 
        fd1 = -1;     \ 
    }   \ 
} 

#define SHUT_FD2 { \ 
    if (fd2 >= 0) {   \ 
        shutdown (fd2, SHUT_RDWR);  \ 
        close (fd2);  \ 
        fd2 = -1;     \ 
    }   \ 
} 

#define BUF_SIZE 1024 

int main (int argc, char **argv)
{ 
    int h; 
    int fd1 = -1, fd2 = -1; 
    char buf1[BUF_SIZE], buf2[BUF_SIZE]; 
    int buf1_avail, buf1_written; 
    int buf2_avail, buf2_written; 

    if (argc != 4) 
	{ 
        fprintf (stderr, "Usage\n\tfwd   \n"); 
        exit (1); 
    } 

    signal (SIGPIPE, SIG_IGN); 

    forward_port = atoi (argv[2]); 

    /*建立監聽socket*/ 
    h = listen_socket (atoi (argv[1])); 
    if (h < 0)
	{
		exit (1); 
	}

    for (;;) 
	{ 
        int r, nfds = 0; 
        fd_set rd, wr, er; 
        FD_ZERO (&rd); 
        FD_ZERO (&wr); 
        FD_ZERO (&er); 
        FD_SET (h, &rd); 

        /*把監聽socket和可讀socket三個一起放入select的可讀句柄列表里*/ 

        nfds = max (nfds, h); 
        if (fd1 > 0 && buf1_avail < BUF_SIZE)
		{ 
            FD_SET (fd1, &rd); 
            nfds = max (nfds, fd1); 
        } 
        if (fd2 > 0 && buf2_avail < BUF_SIZE) 
		{ 
            FD_SET (fd2, &rd); 
            nfds = max (nfds, fd2); 
        } 

        /*把可寫socket兩個一起放入select的可寫句柄列表里*/ 中國網管論壇 
        if (fd1 > 0 && buf2_avail - buf2_written > 0) 
		{ 
            FD_SET (fd1, &wr); 
            nfds = max (nfds, fd1); 
        } 
        if (fd2 > 0 && buf1_avail - buf1_written > 0) 
		{ 
            FD_SET (fd2, &wr); 
            nfds = max (nfds, fd2); 
        } 

        /*把有異常數據的socket兩個一起放入select的異常句柄列表里*/ 
        if (fd1 > 0) 
		{ 
            FD_SET (fd1, &er); 
            nfds = max (nfds, fd1); 
        } 
        if (fd2 > 0) 
		{ 
            FD_SET (fd2, &er); 
            nfds = max (nfds, fd2); 
        } 

        /*開始select*/ 
        r = select (nfds + 1, &rd, &wr, &er, NULL); 

        if (r == -1 && errno == EINTR)
		{
			continue; 
		}

        if (r < 0) 
		{ 
            perror ("select()"); 
            exit (1); 
        } 

        /*處理新連接*/ 
        if (FD_ISSET (h, &rd))
		{ 
            unsigned int l; 
            struct sockaddr_in client_address; 
            memset (&client_address, 0, l = sizeof (client_address)); 
            r = accept (h, (struct sockaddr *)&client_address, &l); 

            if (r < 0) 
			{ 
                perror ("accept()"); 
            } 
			else
			{ 
                /*關閉原有連接,把新連接作為fd1,同時連接新的目標fd2*/ 
                SHUT_FD1; 
                SHUT_FD2; 
                buf1_avail = buf1_written = 0; 
                buf2_avail = buf2_written = 0; 

                fd1 = r; 
                fd2 = connect_socket (forward_port, argv[3]); 
                if (fd2 < 0)
				{ 
                    SHUT_FD1; 
                }
				else 
				{
					printf ("connect from %s\n", inet_ntoa(client_address.sin_addr)); 
				}
            } 
        } 

        /* NB: read oob data before normal reads */ 
        if (fd1 > 0) 
		{
			if (FD_ISSET (fd1, &er)) 
			{ 
				char c; 
				errno = 0; 
				r = recv (fd1, &c, 1, MSG_OOB); 
				if (r < 1) 
				{ 
					SHUT_FD1; 
				} 
				else 
				{
					send (fd2, &c, 1, MSG_OOB); 
				}
			} 
		}

        if (fd2 > 0) 
		{
			if (FD_ISSET (fd2, &er)) 
			{ 
				char c; 
				errno = 0; 
				r = recv (fd2, &c, 1, MSG_OOB); 
				if (r < 1) 
				{ 
					SHUT_FD1; 
				} 
				else 
				{
					send (fd1, &c, 1, MSG_OOB); 
				}
			} 
		}

        /* NB: read data from fd1 */ 
        if (fd1 > 0) 
		{
			if (FD_ISSET (fd1, &rd)) 
			{ 
				r = read (fd1, buf1 + buf1_avail, BUF_SIZE - buf1_avail); 
				if (r < 1)
				{ 
					SHUT_FD1; 
				} 
				else 
				{
					buf1_avail += r; 
				}
			} 
		}

        /* NB: read data from fd2 */ 
        if (fd2 > 0) 
		{
			if (FD_ISSET (fd2, &rd)) 
			{ 
				r = read (fd2, buf2 + buf2_avail, BUF_SIZE - buf2_avail); 
				if (r < 1) 
				{ 
					SHUT_FD2; 
				} 
				else 
				{
					buf2_avail += r; 
				}
			} 
		}

        /* NB: write data to fd1 */ bitscn.com 
        if (fd1 > 0) 
		{
			if (FD_ISSET (fd1, &wr))
			{ 
				r = write (fd1, buf2 + buf2_written, buf2_avail - buf2_written); 
				if (r < 1) 
				{ 
					SHUT_FD1; 
				} 
				else 
				{
					buf2_written += r; 
				}
			} 
		}

        /* NB: write data to fd1 */ 
        if (fd2 > 0) 
		{
			if (FD_ISSET (fd2, &wr)) 
			{ 
				r = write (fd2, buf1 + buf1_written, buf1_avail - buf1_written); 
				if (r < 1) 
				{ 
					SHUT_FD2; 
				} 
				else 
				{
					buf1_written += r; 
				}
			} 
		}

        /* check if write data has caught read data */ 
        if (buf1_written == buf1_avail)
		{
			buf1_written = buf1_avail = 0; 
		}

        if (buf2_written == buf2_avail)
		{
			buf2_written = buf2_avail = 0; 
		}
        
        /* one side has closed the connection, keep writing to the other side until empty */ 
        if (fd1 < 0 && buf1_avail - buf1_written == 0)
		{ 
            SHUT_FD2; 
        } 
        if (fd2 < 0 && buf2_avail - buf2_written == 0)
		{ 
            SHUT_FD1; 
        } 
    } 
    return 0; 
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级在线观看| 一区二区三区在线视频免费| 国产精品久久国产精麻豆99网站| 亚洲色图欧美在线| 久久97超碰国产精品超碰| 成人不卡免费av| 日韩一二三区视频| 中文av一区二区| 日本成人在线电影网| 色综合久久综合网| 国产欧美日韩另类视频免费观看| 日韩在线一区二区三区| 91日韩精品一区| 日本一区二区成人| 国产米奇在线777精品观看| 欧美日韩高清在线播放| 亚洲欧美日韩在线播放| 成人午夜在线免费| 久久九九99视频| 久久精品久久精品| 欧美一区二区三区视频在线| 亚洲综合在线观看视频| 成人ar影院免费观看视频| 久久精品免费在线观看| 精品亚洲porn| 精品国产欧美一区二区| 奇米888四色在线精品| 欧美日韩精品久久久| 亚洲狠狠爱一区二区三区| 在线这里只有精品| 夜夜操天天操亚洲| 欧美精品v国产精品v日韩精品| 亚洲自拍另类综合| 欧美视频中文一区二区三区在线观看| 综合在线观看色| 91精彩视频在线| 亚洲成人午夜电影| 欧美日韩国产片| 丝袜美腿亚洲色图| 91精品免费观看| 久久精品国产精品亚洲红杏 | 国产精品天美传媒沈樵| 国产精品99久| 国产精品久久久久久久久搜平片 | 国产精品国产三级国产普通话三级| 国产麻豆精品在线观看| 国产欧美日韩亚州综合| 99久久精品情趣| 亚洲精品一二三区| 欧美日韩另类一区| 国产寡妇亲子伦一区二区| 国产精品美女久久久久久| 色噜噜狠狠成人网p站| 亚洲va韩国va欧美va精品| 91精品国产欧美一区二区18| 久久精品国产在热久久| 国产精品久久久一本精品| 色综合久久综合网97色综合 | 国产成人免费视频网站高清观看视频| 国产拍欧美日韩视频二区| 99在线精品免费| 婷婷综合另类小说色区| 26uuu国产一区二区三区| 成人app软件下载大全免费| 亚洲午夜视频在线| 久久综合九色综合久久久精品综合| 大尺度一区二区| 亚洲成人动漫av| 国产精品青草综合久久久久99| 欧美性xxxxxxxx| 国产成人在线免费| 午夜久久久久久久久久一区二区| 精品奇米国产一区二区三区| 91啪在线观看| 麻豆91在线播放| 亚洲视频香蕉人妖| 久久综合九色综合97婷婷| 色婷婷激情一区二区三区| 国产综合成人久久大片91| 亚洲黄色av一区| 国产欧美日韩在线| 日韩区在线观看| 日本高清视频一区二区| 国产一区二区三区四| 亚洲成年人影院| 国产精品美女久久久久久2018| 日韩视频123| 在线观看日产精品| 成人黄色在线网站| 国产乱理伦片在线观看夜一区| 亚洲高清中文字幕| 亚洲少妇中出一区| 国产日韩欧美激情| 久久久精品人体av艺术| 欧美一级免费大片| 欧美午夜一区二区三区免费大片| 成人天堂资源www在线| 麻豆国产欧美一区二区三区| 亚洲午夜一区二区| 一区二区三区四区av| 中文字幕一区不卡| 国产女主播视频一区二区| 久久午夜羞羞影院免费观看| 日韩一区二区三区四区| 欧美色成人综合| 色婷婷精品久久二区二区蜜臀av | 亚洲免费毛片网站| 国产精品毛片a∨一区二区三区| 日韩精品一区二区三区老鸭窝 | 日韩在线观看一区二区| 亚洲女人小视频在线观看| 国产欧美一二三区| 国产日韩精品一区| 国产欧美一区二区精品性色| 久久久国产精华| 国产欧美日韩精品在线| 中文字幕二三区不卡| 国产精品拍天天在线| 国产精品久久久久aaaa| 国产精品伦理在线| 一区二区三区免费看视频| 国产一区激情在线| 国内精品国产三级国产a久久| 久国产精品韩国三级视频| 精品无人区卡一卡二卡三乱码免费卡 | 亚洲香蕉伊在人在线观| 亚洲亚洲精品在线观看| 日本 国产 欧美色综合| 精品一区二区三区在线播放 | 久久久久久免费网| 欧美国产日韩在线观看| 亚洲视频一二三| 天堂成人国产精品一区| 国产一区二三区好的| 不卡av在线网| 欧美影院一区二区三区| 欧美二区三区的天堂| 337p日本欧洲亚洲大胆精品| 中文av一区特黄| 亚洲成人黄色小说| 久久av中文字幕片| 白白色 亚洲乱淫| 欧美三级日韩三级| 日韩欧美第一区| 国产精品久久二区二区| 亚洲一级二级三级在线免费观看| 奇米精品一区二区三区四区| 国产精品一区二区三区乱码| 在线视频综合导航| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品久久国产精麻豆99网站| 婷婷中文字幕综合| 不卡高清视频专区| 91精品蜜臀在线一区尤物| 国产精品水嫩水嫩| 日韩和欧美的一区| caoporen国产精品视频| 88在线观看91蜜桃国自产| 久久久久久久久久久久久久久99 | 亚洲精品一区二区三区香蕉| 亚洲欧美另类在线| 久久99国产精品成人| 91福利国产精品| 国产欧美一区二区精品仙草咪 | 一区二区三区成人| 国产乱一区二区| 欧美另类z0zxhd电影| 国产精品久久久久久久浪潮网站| 免费成人性网站| 欧美中文字幕亚洲一区二区va在线| 欧美精品一区二区三区在线 | 91在线国产观看| 精品sm捆绑视频| 婷婷成人综合网| 色一情一乱一乱一91av| 国产视频亚洲色图| 久久99热这里只有精品| 欧美视频完全免费看| 亚洲人成伊人成综合网小说| 国产美女视频一区| 精品福利二区三区| 蜜臀av在线播放一区二区三区| 欧美性做爰猛烈叫床潮| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 久久99精品久久久久久国产越南| 欧美视频中文字幕| 亚洲国产精品自拍| 一本大道久久精品懂色aⅴ| 自拍偷拍亚洲激情| av在线综合网| 中文字幕在线不卡国产视频| 国产精品一区二区三区网站| 久久综合久久综合久久综合| 毛片av一区二区| 日韩视频免费观看高清在线视频| 午夜在线电影亚洲一区| 欧美日韩精品三区| 免费国产亚洲视频| 日韩精品一区二区三区视频 | 在线日韩一区二区|