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

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

?? get.c

?? 一個開源的網絡開發庫ACE
?? C
字號:
/* get.c,v 1.2 2000/06/04 22:00:03 brunsch Exp */
/**************************************************************************
 *									  *
 * 		 Copyright (C) 1995 Silicon Graphics, Inc.		  *
 *									  *
 *  These coded instructions, statements, and computer programs were	  *
 *  developed by SGI for public use.  If any changes are made to this code*
 *  please try to get the changes back to the author.  Feel free to make  *
 *  modifications and changes to the code and release it.		  *
 *									  *
 **************************************************************************/
 
/* THIS IS WHERE WE GO OUT AND FETCH A URL */

#include <stdio.h>
#include <errno.h>

#ifndef WIN32
#include <sys/types.h>
#include <sys/errno.h>
#include <sys/socket.h>
#include <sys/param.h>
#include <netinet/in.h>
#include <netdb.h>
#endif /* WIN32 */

#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#ifdef SUNOS
#include <unistd.h>
#endif
#include <ctype.h>

#ifdef WIN32
#include <io.h>
#include <windows.h>
#include <winsock.h>
#endif /* WIN32 */

#include "sysdep.h"
#include "bench.h"

#define ACCEPT_COMMAND "Accept: */* HTTP/1.0\r\n\r\n"
#define ACCEPT_COMMAND_LEN 	((int)strlen(ACCEPT_COMMAND))
#define MAXCOMMANDLEN	256
#define HEADERBUFSIZ	(8*1024)

#define UPPER(c) (((c) >= 'a' && (c) <= 'z') ? (c) + 'A' - 'a' : (c))

/* compare two strings with max length, ignoring case */
int mystrincmp(const char *str1, const char *str2, int len) {
register int diff;

    while (*str1 && *str2 && len--) {
	if (diff = UPPER(*str1) - UPPER(*str2))
	    return diff < 0 ? -1 : 1;
	str1++;
	str2++;
    }
    return 0;
}

int
get(char *loc, NETPORT port, char *url, rqst_timer_t *timer)
{
    SOCKET	sock = BADSOCKET_VALUE;
    int		writelen;
    int		bytesread;
    int		totalbytesread;
    int		headerlen;
    int		bodylength;
    int		contentlength = 0;
    int 	outputfile = -1;
    int		status;
    char	getcommand[MAXCOMMANDLEN];
    char	headerbuffer[HEADERBUFSIZ+1];
    char	*offset;
    char	outputfilename[MAXPATHLEN];
    char	version[100];
    int		count;

/*#define ABORTIVE_CLOSE 1*/
#ifdef ABORTIVE_CLOSE
#error don't enable this option
    struct linger {
	int l_onoff;
	int l_linger;
    } linger_opt;
#endif /* ABORTIVE_CLOSE */

    /* can you really get an error from gettimeofday?? */
    if(GETTIMEOFDAY(&timer->entertime, &timer->entertimezone) != 0)
    {
	returnerr("Error retrieving entertime\n");
	goto error;
    }
    timer->valid = 1;

    if(GETTIMEOFDAY(&timer->beforeconnect, &timer->beforeconnectzone) != 0)
    {
	returnerr("Error retrieving beforeconnect\n");
	goto error;
    }

    sock = connectsock(loc, port, "tcp");
    if (BADSOCKET(sock))
    {
	D_PRINTF( "Call to connectsock returned %d (%s)\n", sock, neterrstr() );
	returnerr("Couldn't connect to WWW server: %s\n", neterrstr());
	goto error;
    }

#ifdef ABORTIVE_CLOSE    
#error don't enable this option
    /* set up for abortive close */
    linger_opt.l_onoff = 1;
    linger_opt.l_linger = 0;
    if (setsockopt(sock, SOL_SOCKET, SO_LINGER,
	    (char *) &linger_opt, sizeof(linger_opt)) < 0) {
	fprintf(stderr, "Can't set sockopt SO_LINGER");
	returnerr("Couldn't set SO_LINGER = 0\n");
	goto error;
    }
#endif /* ABORTIVE_CLOSE */

    if(GETTIMEOFDAY(&timer->afterconnect, &timer->afterconnectzone) != 0)
    {
	NETCLOSE(sock);
	GETTIMEOFDAY(&timer->exittime, &timer->exittimezone);
	returnerr("Error retrieving afterconnect\n");	
	goto error;
    }

    /*
     * SEND THE GET AND THE ACCEPT.
     */
    sprintf(getcommand, "GET %s HTTP/1.0\r\n%s", url,
            ACCEPT_COMMAND);
    D_PRINTF( "Writing to server: %s\n", getcommand );
    writelen = strlen(getcommand);
    status = NETWRITE(sock, getcommand, writelen);
    if(status != writelen)
    {
	returnerr("Error sending command line to server: %s\n",
		neterrstr());
	goto error;
    }
    /* 
     * WE HAVE NOW SENT THE REQUEST SUCCESSFULLY.  
     * WAIT FOR THE REPLY AND FIND THE HEADER 
     */
    
    if(GETTIMEOFDAY(&timer->beforeheader, &timer->beforeheaderzone) != 0)
    {
	returnerr("Error retrieving beforeheader\n");
	goto error;
    }

    /* read the header and part of the file */
    totalbytesread = 0;
    headerlen = 0;
    while (totalbytesread < HEADERBUFSIZ)
    {
        bytesread = NETREAD(sock, headerbuffer+totalbytesread, HEADERBUFSIZ-totalbytesread);
        if (BADSOCKET(bytesread))
        {
	    D_PRINTF( "Did not receive full header\n" );
	    D_PRINTF( "NETREAD returned %d\n", bytesread );
	    returnerr("Did not receive full header: %s\n",
		neterrstr());
	    goto error;
        }
        totalbytesread += bytesread;

	/* search for end of header */
	headerbuffer[totalbytesread] = 0;
	if (offset = strstr(headerbuffer, "\n\n")) {
	    headerlen = offset - headerbuffer + 2;
	    break;
	} else if (offset = strstr(headerbuffer, "\n\r\n")) {
	    headerlen = offset - headerbuffer + 3;
	    break;
	}
    }

    if (headerlen == 0) {
	returnerr("Can't find the end of the header in \"%s\"\n", headerbuffer);
	goto error;
    }

    /* get and check status code from the first line of the header */
    count = sscanf(headerbuffer, "HTTP/%s %d", version, &status);
    if (count != 2) {
	returnerr("Bad status line in get(): %s\n", headerbuffer);
	goto error;
    }
    if (status < 200 || status > 300) {
	returnerr("Bad status (%d) in get() for url %s\n", status, url);
	goto error;
    }

    /* get the content length line from the header */
    offset = headerbuffer;
    while (offset < headerbuffer+headerlen && *offset) {
	if (*offset++ != '\n')
	    continue;

	if (mystrincmp(offset, CONTENT_LENGTH_STRING, strlen(CONTENT_LENGTH_STRING)) == 0) {
	    sscanf(offset+strlen(CONTENT_LENGTH_STRING), "%d", &contentlength);
	    D_PRINTF( "Content-Length: %d\n", contentlength );
	}
    }

    if(GETTIMEOFDAY(&timer->afterheader, &timer->afterheaderzone) != 0)
    {
	returnerr("Error retrieving afterheader\n");
	goto error;
    }

    if(savefile)
    {
        sprintf(outputfilename,"/tmp/webstone.data.%d", (int)getpid());
        if((outputfile = open(outputfilename,(O_WRONLY|O_CREAT),0777)) < 0)
        {
            D_PRINTF( "outputfile %d %d\n", outputfile, errno ); 
	    returnerr("Error saving file: %s\n", strerror(errno)); 
	    goto error;
        }
	lseek(outputfile,1,SEEK_END);	/* this is odd... JEF */

	/* if we have part of the file already, save that part */
	if(totalbytesread > headerlen)
	{
	    write(outputfile, headerbuffer+headerlen, totalbytesread-headerlen);
	}
    }

    /* read the body of the file */
    do
    {
	bytesread = NETREAD(sock, headerbuffer, HEADERBUFSIZ);
	D_PRINTF( "Read %d bytes from socket %d\n", bytesread, sock );

	if (BADSOCKET(bytesread))
	{
	    D_PRINTF( "Read returns %d, error: %s\n", bytesread,
		  neterrstr() );
            returnerr("Error during read of page body. Read "
			     "returns %d on socket %d, error: %s\n",
			     bytesread, sock, neterrstr());
	    goto error;
	}

	totalbytesread += bytesread;

	if (outputfile != -1 && bytesread)
	{
	    write(outputfile, headerbuffer, bytesread);
	}

    } while (bytesread);
    
    /* done reading body */
    if ( contentlength && (totalbytesread - headerlen) != contentlength)
    {
	D_PRINTF( "Warning: file length (%d) doesn't match Content-length (%d)\n",
	    totalbytesread - headerlen, contentlength);
    }
    
    bodylength = totalbytesread - headerlen;

    if(GETTIMEOFDAY(&timer->afterbody, &timer->afterbodyzone) != 0)
    {
	returnerr("Error retrieving afterbody\n");
	goto error;
    }

    NETCLOSE(sock);
    if (outputfile != -1)
    {
        close(outputfile);
    }

    D_PRINTF( "Read %d bytes, %d of that being body\n",
	  totalbytesread, bodylength );

    if(GETTIMEOFDAY(&timer->exittime, &timer->exittimezone) != 0)
    {
	D_PRINTF( "Error retrieving exit time: %s\n", strerror(errno) );
	returnerr("Error retrieving exit time\n");
	goto error;
    }
    timer->valid = 2;
    timer->totalbytes = totalbytesread;
    timer->bodybytes = bodylength;

    D_PRINTF( "get returning totalbytes %d body %d valid %d\n", 
	timer->totalbytes, timer->bodybytes, timer->valid );

    D_PRINTF( "get returning start %d, end %d\n", 
	timer->entertime.tv_sec, timer->exittime.tv_sec	); 

    D_PRINTF( "get returning connect %d, request %d, header %d, body %d\n",
	timer->afterconnect.tv_sec, timer->beforeheader.tv_sec, 
	timer->afterheader.tv_sec, timer->afterbody.tv_sec );

    return 0;

error:
    if (!BADSOCKET(sock))
        NETCLOSE(sock);
    if (outputfile != -1)
	close(outputfile);
    GETTIMEOFDAY(&timer->exittime, &timer->exittimezone);   /* needed? */
    return -1;
}  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人中文字幕电影| 成年人网站91| 亚洲成人av一区二区三区| 精品播放一区二区| 精品国偷自产国产一区| 欧美一级片在线观看| 欧美亚洲国产一卡| 欧美视频中文字幕| 欧美日韩极品在线观看一区| 在线观看日韩av先锋影音电影院| 不卡视频一二三| 成人综合在线观看| 色老头久久综合| 欧美在线色视频| 欧美日本视频在线| 日韩欧美在线网站| 久久影院午夜论| 国产精品视频一二三| 亚洲欧洲av在线| 亚洲欧美激情一区二区| 亚洲综合av网| 麻豆精品在线观看| 国产精品中文欧美| 99久久精品国产导航| 欧美又粗又大又爽| 91精品视频网| 精品日韩一区二区三区| 欧美韩国日本一区| 亚洲国产一区二区视频| 蜜桃久久久久久久| 99精品在线免费| 91麻豆精品国产91久久久久| 久久亚洲精品小早川怜子| 中文字幕不卡的av| 日韩av电影天堂| 国产99一区视频免费| 91久久精品一区二区三| 欧美成人一区二区三区| 国产欧美日韩亚州综合| 亚洲美女免费在线| 精品一区二区三区久久久| 国产福利一区在线| 欧美日韩成人综合天天影院| 亚洲精品一区二区三区四区高清| 亚洲欧美偷拍另类a∨色屁股| 天天操天天色综合| 高潮精品一区videoshd| 欧美精品乱码久久久久久按摩| 精品动漫一区二区三区在线观看| 亚洲品质自拍视频| 国产自产2019最新不卡| 欧美日韩免费电影| 中文字幕中文字幕一区| 精品在线观看视频| 精品视频色一区| 中文字幕亚洲综合久久菠萝蜜| 五月激情综合色| 91亚洲男人天堂| 久久久精品免费网站| 天堂va蜜桃一区二区三区漫画版| 成人免费va视频| 2021久久国产精品不只是精品| 日韩中文字幕91| 日本乱人伦aⅴ精品| 久久久精品综合| 激情图片小说一区| 日韩女优av电影| 天堂蜜桃91精品| 欧美亚洲国产bt| 亚洲精品写真福利| 99国产精品国产精品毛片| 国产视频一区在线观看| 久久99国产精品尤物| 91精品欧美综合在线观看最新| 亚洲精品国产视频| 色综合夜色一区| 亚洲码国产岛国毛片在线| 国产91在线观看丝袜| 久久久久久久久久久久电影| 久久精品99久久久| 欧美大片免费久久精品三p| 视频在线在亚洲| 制服丝袜激情欧洲亚洲| 天天爽夜夜爽夜夜爽精品视频| 欧美美女视频在线观看| 亚洲成av人**亚洲成av**| 欧美日韩免费观看一区三区| 亚洲成人资源在线| 日韩一本二本av| 国产九色sp调教91| 国产午夜精品久久久久久久 | 中文字幕综合网| 成人国产精品免费网站| 中文字幕亚洲电影| 在线观看网站黄不卡| 午夜av电影一区| 2023国产精华国产精品| 风间由美一区二区三区在线观看 | 亚洲国产精品成人综合色在线婷婷| 国产成人夜色高潮福利影视| 中文字幕乱码久久午夜不卡| 91国内精品野花午夜精品| 一区二区成人在线观看| 欧美一区二区在线播放| 丁香六月综合激情| 亚洲制服丝袜一区| 2023国产一二三区日本精品2022| 成人蜜臀av电影| 首页国产欧美久久| 国产精品久久久久aaaa樱花| 日本电影欧美片| 国内精品免费**视频| 亚洲品质自拍视频| 久久婷婷色综合| 色婷婷综合久久久久中文一区二区| 丝袜美腿一区二区三区| 国产亚洲制服色| 欧美精品日韩综合在线| 国产91清纯白嫩初高中在线观看 | 久久中文娱乐网| 色综合久久九月婷婷色综合| 另类人妖一区二区av| 中文字幕一区二区三区在线不卡| 欧美一区二区三区爱爱| 成人教育av在线| 麻豆久久久久久久| 亚洲午夜久久久久中文字幕久| 久久一区二区三区国产精品| 色诱亚洲精品久久久久久| 极品少妇xxxx精品少妇偷拍| 亚洲国产你懂的| 欧美国产日本视频| 日韩欧美在线1卡| 欧美三级午夜理伦三级中视频| 国产精品456露脸| 麻豆成人久久精品二区三区小说| 亚洲最快最全在线视频| 国产精品美女一区二区三区| 欧美精品一区二区精品网| 欧美色图激情小说| 色偷偷久久一区二区三区| 成人自拍视频在线观看| 国产一区二区三区精品欧美日韩一区二区三区| 国产精品久久久久aaaa樱花| 久久综合久久综合久久综合| 日韩欧美123| 日韩视频免费观看高清在线视频| 欧美日韩久久一区| 在线亚洲高清视频| 91传媒视频在线播放| av一区二区三区四区| 成人app在线| 国产成人午夜电影网| 国产成人午夜99999| 国产麻豆一精品一av一免费| 久久黄色级2电影| 日本aⅴ亚洲精品中文乱码| 午夜久久久久久电影| 婷婷一区二区三区| 美腿丝袜亚洲三区| 久久国产日韩欧美精品| 韩国一区二区视频| 国产一区激情在线| 国产乱码精品一区二区三| 激情av综合网| 成人黄色在线视频| 色欧美片视频在线观看| 欧美午夜一区二区三区免费大片| 欧美色涩在线第一页| 欧美精品777| 欧美电影免费观看高清完整版在| 欧美精品一区二| 中文字幕巨乱亚洲| 日韩毛片高清在线播放| 亚洲综合精品久久| 久久精品72免费观看| 国产不卡视频一区二区三区| 99国产精品久| 欧美日韩www| 久久蜜臀精品av| 亚洲人成精品久久久久久| 亚洲国产成人tv| 精品在线视频一区| 91丨porny丨国产| 欧美精品久久一区二区三区| 精品免费视频.| 亚洲免费观看高清完整版在线 | 国产精品原创巨作av| 不卡的电影网站| 欧美撒尿777hd撒尿| 精品久久久久久无| 亚洲精品精品亚洲| 九九**精品视频免费播放| 不卡免费追剧大全电视剧网站| 欧美影片第一页| 日本一区二区三区dvd视频在线| 一区二区三区在线观看动漫| 精品一区二区三区免费视频| 99久久精品免费精品国产| 日韩欧美不卡一区|