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

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

?? socket.c

?? xmlrpc,用 XML表示得遠程過程調用,基于web上得遠程計算
?? C
字號:
/*******************************************************************************
**
** socket.c
**
** This file is part of the ABYSS Web server project.
**
** Copyright (C) 2000 by Moez Mahfoudh <mmoez@bigfoot.com>.
** All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions
** are met:
** 1. Redistributions of source code must retain the above copyright
**    notice, this list of conditions and the following disclaimer.
** 2. Redistributions in binary form must reproduce the above copyright
**    notice, this list of conditions and the following disclaimer in the
**    documentation and/or other materials provided with the distribution.
** 3. The name of the author may not be used to endorse or promote products
**    derived from this software without specific prior written permission.
** 
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
** ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
** SUCH DAMAGE.
**
*******************************************************************************/

#include "abyss.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#ifdef ABYSS_WIN32
#define  EINTR		WSAEINTR
#endif

static abyss_bool ABYSS_TRACE_SOCKET;

/*********************************************************************
** Socket
*********************************************************************/

abyss_bool SocketInit()
{
    abyss_bool retval;
#ifdef ABYSS_WIN32
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
 
	wVersionRequested = MAKEWORD( 2, 0 );
 
	err = WSAStartup( wVersionRequested, &wsaData );
	retval = ( err == 0 );
#else
	retval = TRUE;
    ABYSS_TRACE_SOCKET = (getenv("ABYSS_TRACE_SOCKET") != NULL);
#endif	/* ABYSS_WIN32 */
    if (ABYSS_TRACE_SOCKET)
        fprintf(stderr, "Abyss socket layer will trace socket traffic "
                "due to ABYSS_TRACE_SOCKET environment variable\n");
    return retval;
}

#define RET(x)	return ((x)!=(-1))

abyss_bool SocketCreate(TSocket *s)
{
    int rc;

    rc =socket(AF_INET,SOCK_STREAM,0);
    if (rc < 0)
		return FALSE;
    else {
        int32 n=1;
        *s = rc;
        RET(setsockopt(*s,SOL_SOCKET,SO_REUSEADDR,(char*)&n,sizeof(n)));
    }
}

abyss_bool SocketClose(TSocket *s)
{
#ifdef ABYSS_WIN32
	RET(closesocket(*s));
#else
	RET(close(*s));
#endif	/* ABYSS_WIN32 */
}

uint32 SocketWrite(TSocket *s, char *buffer, uint32 len)
{
	return send(*s,buffer,len,0);
}



uint32 SocketRead(TSocket * const socketP, 
                  char *    const buffer, 
                  uint32    const len) {
    int rc;
    rc = recv(*socketP, buffer, len, 0);
    if (ABYSS_TRACE_SOCKET) {
        if (rc < 0)
            fprintf(stderr, "Abyss socket: recv() failed.  errno=%d (%s)",
                    errno, strerror(errno));
        else 
            fprintf(stderr, "Abyss socket: read %u bytes: '%.*s'\n",
                    len, (int)len, buffer);
    }
    return rc;
}



uint32 SocketPeek(TSocket *s, char *buffer, uint32 len)
{
	int32 r=recv(*s,buffer,len,MSG_PEEK);

	if (r==(-1))
#ifdef ABYSS_WIN32
		if (SocketError()==WSAEMSGSIZE)
#else
		if (SocketError()==EMSGSIZE)
#endif
			return len;

	return r;
}

abyss_bool SocketConnect(TSocket *s, TIPAddr *addr, uint16 port)
{
	struct sockaddr_in name;

	name.sin_family=AF_INET;
	name.sin_port=htons(port);
	name.sin_addr=*addr;

	RET(connect(*s,(struct sockaddr *)&name,sizeof(name)));
}

abyss_bool SocketBind(TSocket *s, TIPAddr *addr, uint16 port)
{
	struct sockaddr_in name;

	name.sin_family=AF_INET;
	name.sin_port=htons(port);
	if (addr)
		name.sin_addr=*addr;
	else
		name.sin_addr.s_addr=INADDR_ANY;

	RET(bind(*s,(struct sockaddr *)&name,sizeof(name)));
}

abyss_bool SocketListen(TSocket *s, uint32 backlog)
{
	int32 n=-1;

	/* Disable the naggle algorithm to make persistant connections faster */
	setsockopt(*s, IPPROTO_TCP,TCP_NODELAY,(char *)&n,sizeof(n));

	RET(listen(*s,backlog));
}

abyss_bool SocketAccept(TSocket *s, TSocket *ns,TIPAddr *ip)
{
	struct sockaddr_in sa;
	uint32 size=sizeof(sa);
    abyss_bool connected;

    connected = FALSE;
	for (;;) {
        int rc;
        rc = accept(*s,(struct sockaddr *)&sa,&size);
        if (rc >= 0)
		{
            connected = TRUE;
            *ns = rc;
			*ip=sa.sin_addr;
			break;
		}
		else
			if (SocketError()!=EINTR)
				break;
    }	
	return connected;
}

uint32 SocketWait(TSocket *s,abyss_bool rd,abyss_bool wr,uint32 timems)
{
	fd_set rfds,wfds;
#ifdef ABYSS_WIN32
	TIMEVAL tv;
#else
	struct timeval tv;
#endif	/* ABYSS_WIN32 */

	FD_ZERO(&rfds);
	FD_ZERO(&wfds);

	if (rd)
		FD_SET(*s,&rfds);

	if (wr)
		FD_SET(*s,&wfds);

	tv.tv_sec=timems/1000;
	tv.tv_usec=timems%1000;


	for (;;)
		switch(select((*s)+1,&rfds,&wfds,NULL,
			(timems==TIME_INFINITE?NULL:&tv)))
		{ 	
		case 0:	/* time out */
			return 0;

		case (-1):	/* socket error */
			if (SocketError()==EINTR)
				break;
			
			return 0;

		default:
			if (FD_ISSET(*s,&rfds))
				return 1;
			if (FD_ISSET(*s,&wfds))
				return 2;
			return 0;
		};
}

abyss_bool SocketBlocking(TSocket *s, abyss_bool b)
{
	uint32 x=b;

	RET(ioctlsocket(*s,FIONBIO,&x));
}

uint32 SocketAvailableReadBytes(TSocket *s)
{
	uint32 x;

	if (ioctlsocket(*s,FIONREAD,&x)!=0)
		x=0;

	return x;
}

uint32 SocketError()
{
#ifdef ABYSS_WIN32
	return WSAGetLastError();
#else
	return errno;
#endif	/* ABYSS_WIN32 */
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天色天天爱天天射综合| 欧美午夜精品一区二区三区| 91麻豆精品国产自产在线观看一区| 中文字幕亚洲区| 成人国产亚洲欧美成人综合网 | 欧美日韩一区三区四区| 国产精品麻豆99久久久久久| 成人污污视频在线观看| 中文字幕一区二区视频| 9人人澡人人爽人人精品| 中文字幕一区二区三区不卡在线| 成人精品国产一区二区4080| 国产精品久久久久久久蜜臀| 91在线国产观看| 亚洲同性同志一二三专区| 99热在这里有精品免费| 亚洲精品水蜜桃| 欧美日韩亚州综合| 天天免费综合色| 欧美精品色综合| 免费的国产精品| 国产色91在线| 99久久久精品免费观看国产蜜| 亚洲三级电影网站| 欧美性视频一区二区三区| 亚洲va欧美va人人爽| 欧美电视剧在线观看完整版| 国产精品原创巨作av| 久久精品亚洲麻豆av一区二区| 国内偷窥港台综合视频在线播放| 欧美精品一区二区高清在线观看| 国产suv精品一区二区883| 国产精品久久久久久久岛一牛影视| 91免费版在线看| 亚洲a一区二区| 久久久噜噜噜久久中文字幕色伊伊| 粉嫩高潮美女一区二区三区| 亚洲欧美在线视频| 91精品国产色综合久久ai换脸| 激情偷乱视频一区二区三区| 国产精品卡一卡二| 宅男噜噜噜66一区二区66| 国产精品亚洲视频| 亚洲综合久久久| 制服丝袜在线91| 99re热这里只有精品免费视频| 日韩理论片一区二区| 成人午夜短视频| 午夜影院久久久| 久久免费午夜影院| hitomi一区二区三区精品| 日韩不卡一区二区| 国产精品传媒入口麻豆| 欧美一区二区三区视频免费播放| 国产一区二区电影| 亚洲国产婷婷综合在线精品| 久久久精品国产99久久精品芒果| 在线免费观看日韩欧美| 毛片一区二区三区| 亚洲国产视频在线| 欧美国产成人在线| 日韩视频中午一区| 在线观看日韩av先锋影音电影院| 韩国精品主播一区二区在线观看| 亚洲一区二区在线观看视频| 久久免费国产精品| 欧美一级午夜免费电影| 91年精品国产| 成人黄色777网| 国产精品一级二级三级| 免费在线观看精品| 亚洲成人在线免费| 一区二区三区中文在线观看| 欧美激情在线一区二区三区| 精品国产免费一区二区三区四区| 欧美日韩在线电影| 国产制服丝袜一区| 亚洲bdsm女犯bdsm网站| 亚洲男人的天堂在线观看| 国产精品免费视频网站| 国产欧美一区二区精品仙草咪 | 色综合网色综合| 国产美女精品人人做人人爽| 久久国产麻豆精品| 美女视频黄免费的久久| 日韩精品久久久久久| 一个色综合av| 亚洲午夜免费视频| 一区二区三区四区av| 亚洲视频你懂的| 一色屋精品亚洲香蕉网站| 国产欧美精品一区aⅴ影院| 中文字幕精品综合| 欧美精品一区二区在线播放| 欧美一区二区日韩一区二区| 欧美酷刑日本凌虐凌虐| 欧美精品1区2区3区| 91老司机福利 在线| 久久久国产精品不卡| 国产日韩精品一区二区三区 | 亚洲成人激情自拍| 欧美性受极品xxxx喷水| 国产精品三级av在线播放| 成人久久18免费网站麻豆| 欧美一级午夜免费电影| 国产美女在线观看一区| 日韩国产成人精品| 欧美精品一区男女天堂| 日本亚洲三级在线| 亚洲激情男女视频| 亚洲精品国产无套在线观| 无吗不卡中文字幕| 国产精品亚洲视频| 日本韩国一区二区| 国产精品嫩草影院com| 99久久免费精品| 日韩专区欧美专区| 久久免费视频色| 日本韩国精品在线| 久久69国产一区二区蜜臀| 亚洲国产成人在线| 欧美日本视频在线| 国产成人亚洲综合a∨婷婷图片| 亚洲欧美日韩一区二区三区在线观看| 欧美日韩综合在线| 韩国在线一区二区| 亚洲欧美经典视频| 欧美一卡二卡在线观看| 成人国产精品免费| 亚洲品质自拍视频网站| 91精品国产入口| 国产+成+人+亚洲欧洲自线| 亚洲欧洲成人精品av97| 欧美四级电影在线观看| 日本中文字幕一区二区视频| 久久久久国产精品人| 日本韩国精品在线| 国产自产v一区二区三区c| 亚洲国产三级在线| 国产欧美综合在线观看第十页| 欧美日本国产视频| 色综合天天综合网天天狠天天| 久久精品国产精品亚洲红杏 | 亚洲精品在线电影| 国产成人精品在线看| 午夜伊人狠狠久久| 中文字幕在线一区免费| 91偷拍与自偷拍精品| 美女性感视频久久| 亚洲女性喷水在线观看一区| 欧美变态口味重另类| 欧美人与禽zozo性伦| 在线免费观看成人短视频| 国产精品影视在线| 久久不见久久见免费视频1| 亚洲国产日韩a在线播放| 国产精品国产a级| 国产免费久久精品| 久久综合九色综合欧美98| 日韩一区和二区| 欧美日韩在线综合| 欧美性高清videossexo| 一本久久综合亚洲鲁鲁五月天| 国产精品乡下勾搭老头1| 男女激情视频一区| 秋霞电影网一区二区| 免费人成在线不卡| 日本女人一区二区三区| 男女性色大片免费观看一区二区| 日韩精品国产精品| 国内成+人亚洲+欧美+综合在线| 亚洲黄色小视频| 亚洲一区视频在线观看视频| 综合久久久久久久| 亚洲精品在线免费观看视频| 日韩欧美成人一区二区| 日韩欧美一区电影| 精品国产人成亚洲区| 亚洲国产精品激情在线观看 | 亚洲国产精品尤物yw在线观看| 洋洋成人永久网站入口| 一区二区成人在线视频| 亚洲高清一区二区三区| 蜜桃久久久久久久| 国产精品一线二线三线精华| 国产精品一区二区免费不卡| 丁香一区二区三区| 91片黄在线观看| 欧美日韩国产大片| 2欧美一区二区三区在线观看视频| 久久久久久久久久久久久夜| 欧美一级爆毛片| 国产欧美日韩三级| 亚洲精品视频自拍| 日韩电影免费一区| 福利电影一区二区三区| 色噜噜狠狠成人中文综合 | 久久午夜羞羞影院免费观看| 久久婷婷综合激情| 亚洲欧美另类图片小说|