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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? bss_dgram.c

?? OpenSSL 0.9.8k 最新版OpenSSL
?? C
字號(hào):
/* crypto/bio/bio_dgram.c *//*  * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.   *//* ==================================================================== * Copyright (c) 1999-2005 The OpenSSL Project.  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. All advertising materials mentioning features or use of this *    software must display the following acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *    endorse or promote products derived from this software without *    prior written permission. For written permission, please contact *    openssl-core@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" *    nor may "OpenSSL" appear in their names without prior written *    permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following *    acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED 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 OpenSSL PROJECT OR * ITS 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. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com).  This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */#ifndef OPENSSL_NO_DGRAM#include <stdio.h>#include <errno.h>#define USE_SOCKETS#include "cryptlib.h"#include <openssl/bio.h>#define IP_MTU      14 /* linux is lame */#ifdef WATT32#define sock_write SockWrite  /* Watt-32 uses same names */#define sock_read  SockRead#define sock_puts  SockPuts#endifstatic int dgram_write(BIO *h, const char *buf, int num);static int dgram_read(BIO *h, char *buf, int size);static int dgram_puts(BIO *h, const char *str);static long dgram_ctrl(BIO *h, int cmd, long arg1, void *arg2);static int dgram_new(BIO *h);static int dgram_free(BIO *data);static int dgram_clear(BIO *bio);static int BIO_dgram_should_retry(int s);static BIO_METHOD methods_dgramp=	{	BIO_TYPE_DGRAM,	"datagram socket",	dgram_write,	dgram_read,	dgram_puts,	NULL, /* dgram_gets, */	dgram_ctrl,	dgram_new,	dgram_free,	NULL,	};typedef struct bio_dgram_data_st	{	struct sockaddr peer;	unsigned int connected;	unsigned int _errno;	unsigned int mtu;	} bio_dgram_data;BIO_METHOD *BIO_s_datagram(void)	{	return(&methods_dgramp);	}BIO *BIO_new_dgram(int fd, int close_flag)	{	BIO *ret;	ret=BIO_new(BIO_s_datagram());	if (ret == NULL) return(NULL);	BIO_set_fd(ret,fd,close_flag);	return(ret);	}static int dgram_new(BIO *bi)	{	bio_dgram_data *data = NULL;	bi->init=0;	bi->num=0;	data = OPENSSL_malloc(sizeof(bio_dgram_data));	if (data == NULL)		return 0;	memset(data, 0x00, sizeof(bio_dgram_data));    bi->ptr = data;	bi->flags=0;	return(1);	}static int dgram_free(BIO *a)	{	bio_dgram_data *data;	if (a == NULL) return(0);	if ( ! dgram_clear(a))		return 0;	data = (bio_dgram_data *)a->ptr;	if(data != NULL) OPENSSL_free(data);	return(1);	}static int dgram_clear(BIO *a)	{	if (a == NULL) return(0);	if (a->shutdown)		{		if (a->init)			{			SHUTDOWN2(a->num);			}		a->init=0;		a->flags=0;		}	return(1);	}	static int dgram_read(BIO *b, char *out, int outl)	{	int ret=0;	bio_dgram_data *data = (bio_dgram_data *)b->ptr;	struct sockaddr peer;	int peerlen = sizeof(peer);	if (out != NULL)		{		clear_socket_error();		memset(&peer, 0x00, peerlen);		/* Last arg in recvfrom is signed on some platforms and		 * unsigned on others. It is of type socklen_t on some		 * but this is not universal. Cast to (void *) to avoid		 * compiler warnings.		 */		ret=recvfrom(b->num,out,outl,0,&peer,(void *)&peerlen);		if ( ! data->connected  && ret > 0)			BIO_ctrl(b, BIO_CTRL_DGRAM_CONNECT, 0, &peer);		BIO_clear_retry_flags(b);		if (ret <= 0)			{			if (BIO_dgram_should_retry(ret))				{				BIO_set_retry_read(b);				data->_errno = get_last_socket_error();				}			}		}	return(ret);	}static int dgram_write(BIO *b, const char *in, int inl)	{	int ret;	bio_dgram_data *data = (bio_dgram_data *)b->ptr;	clear_socket_error();    if ( data->connected )        ret=writesocket(b->num,in,inl);    else#if defined(NETWARE_CLIB) && defined(NETWARE_BSDSOCK)        ret=sendto(b->num, (char *)in, inl, 0, &data->peer, sizeof(data->peer));#else        ret=sendto(b->num, in, inl, 0, &data->peer, sizeof(data->peer));#endif	BIO_clear_retry_flags(b);	if (ret <= 0)		{		if (BIO_sock_should_retry(ret))			{			BIO_set_retry_write(b);  			data->_errno = get_last_socket_error();#if 0 /* higher layers are responsible for querying MTU, if necessary */			if ( data->_errno == EMSGSIZE)				/* retrieve the new MTU */				BIO_ctrl(b, BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);#endif			}		}	return(ret);	}static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)	{	long ret=1;	int *ip;	struct sockaddr *to = NULL;	bio_dgram_data *data = NULL;	long sockopt_val = 0;	unsigned int sockopt_len = 0;	data = (bio_dgram_data *)b->ptr;	switch (cmd)		{	case BIO_CTRL_RESET:		num=0;	case BIO_C_FILE_SEEK:		ret=0;		break;	case BIO_C_FILE_TELL:	case BIO_CTRL_INFO:		ret=0;		break;	case BIO_C_SET_FD:		dgram_clear(b);		b->num= *((int *)ptr);		b->shutdown=(int)num;		b->init=1;		break;	case BIO_C_GET_FD:		if (b->init)			{			ip=(int *)ptr;			if (ip != NULL) *ip=b->num;			ret=b->num;			}		else			ret= -1;		break;	case BIO_CTRL_GET_CLOSE:		ret=b->shutdown;		break;	case BIO_CTRL_SET_CLOSE:		b->shutdown=(int)num;		break;	case BIO_CTRL_PENDING:	case BIO_CTRL_WPENDING:		ret=0;		break;	case BIO_CTRL_DUP:	case BIO_CTRL_FLUSH:		ret=1;		break;	case BIO_CTRL_DGRAM_CONNECT:		to = (struct sockaddr *)ptr;#if 0		if (connect(b->num, to, sizeof(struct sockaddr)) < 0)			{ perror("connect"); ret = 0; }		else			{#endif			memcpy(&(data->peer),to, sizeof(struct sockaddr));#if 0			}#endif		break;		/* (Linux)kernel sets DF bit on outgoing IP packets */#ifdef IP_MTU_DISCOVER	case BIO_CTRL_DGRAM_MTU_DISCOVER:		sockopt_val = IP_PMTUDISC_DO;		if ((ret = setsockopt(b->num, IPPROTO_IP, IP_MTU_DISCOVER,			&sockopt_val, sizeof(sockopt_val))) < 0)			perror("setsockopt");		break;#endif	case BIO_CTRL_DGRAM_QUERY_MTU:         sockopt_len = sizeof(sockopt_val);		if ((ret = getsockopt(b->num, IPPROTO_IP, IP_MTU, (void *)&sockopt_val,			&sockopt_len)) < 0 || sockopt_val < 0)			{ ret = 0; }		else			{			data->mtu = sockopt_val;			ret = data->mtu;			}		break;	case BIO_CTRL_DGRAM_GET_MTU:		return data->mtu;		break;	case BIO_CTRL_DGRAM_SET_MTU:		data->mtu = num;		ret = num;		break;	case BIO_CTRL_DGRAM_SET_CONNECTED:		to = (struct sockaddr *)ptr;		if ( to != NULL)			{			data->connected = 1;			memcpy(&(data->peer),to, sizeof(struct sockaddr));			}		else			{			data->connected = 0;			memset(&(data->peer), 0x00, sizeof(struct sockaddr));			}		break;    case BIO_CTRL_DGRAM_SET_PEER:        to = (struct sockaddr *) ptr;        memcpy(&(data->peer), to, sizeof(struct sockaddr));        break;#if defined(SO_RCVTIMEO)	case BIO_CTRL_DGRAM_SET_RECV_TIMEOUT:#ifdef OPENSSL_SYS_WINDOWS		{		struct timeval *tv = (struct timeval *)ptr;		int timeout = tv->tv_sec * 1000 + tv->tv_usec/1000;		if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,			(void*)&timeout, sizeof(timeout)) < 0)			{ perror("setsockopt"); ret = -1; }		}#else		if ( setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, ptr,			sizeof(struct timeval)) < 0)			{ perror("setsockopt");	ret = -1; }#endif		break;	case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT:#ifdef OPENSSL_SYS_WINDOWS		{		int timeout, sz = sizeof(timeout);		struct timeval *tv = (struct timeval *)ptr;		if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,			(void*)&timeout, &sz) < 0)			{ perror("getsockopt"); ret = -1; }		else			{			tv->tv_sec = timeout / 1000;			tv->tv_usec = (timeout % 1000) * 1000;			ret = sizeof(*tv);			}		}#else		if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 			ptr, (void *)&ret) < 0)			{ perror("getsockopt"); ret = -1; }#endif		break;#endif#if defined(SO_SNDTIMEO)	case BIO_CTRL_DGRAM_SET_SEND_TIMEOUT:#ifdef OPENSSL_SYS_WINDOWS		{		struct timeval *tv = (struct timeval *)ptr;		int timeout = tv->tv_sec * 1000 + tv->tv_usec/1000;		if (setsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO,			(void*)&timeout, sizeof(timeout)) < 0)			{ perror("setsockopt"); ret = -1; }		}#else		if ( setsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, ptr,			sizeof(struct timeval)) < 0)			{ perror("setsockopt");	ret = -1; }#endif		break;	case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT:#ifdef OPENSSL_SYS_WINDOWS		{		int timeout, sz = sizeof(timeout);		struct timeval *tv = (struct timeval *)ptr;		if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO,			(void*)&timeout, &sz) < 0)			{ perror("getsockopt"); ret = -1; }		else			{			tv->tv_sec = timeout / 1000;			tv->tv_usec = (timeout % 1000) * 1000;			ret = sizeof(*tv);			}		}#else		if ( getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, 			ptr, (void *)&ret) < 0)			{ perror("getsockopt"); ret = -1; }#endif		break;#endif	case BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP:		/* fall-through */	case BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP:#ifdef OPENSSL_SYS_WINDOWS		if ( data->_errno == WSAETIMEDOUT)#else		if ( data->_errno == EAGAIN)#endif			{			ret = 1;			data->_errno = 0;			}		else			ret = 0;		break;#ifdef EMSGSIZE	case BIO_CTRL_DGRAM_MTU_EXCEEDED:		if ( data->_errno == EMSGSIZE)			{			ret = 1;			data->_errno = 0;			}		else			ret = 0;		break;#endif	default:		ret=0;		break;		}	return(ret);	}static int dgram_puts(BIO *bp, const char *str)	{	int n,ret;	n=strlen(str);	ret=dgram_write(bp,str,n);	return(ret);	}static int BIO_dgram_should_retry(int i)	{	int err;	if ((i == 0) || (i == -1))		{		err=get_last_socket_error();#if defined(OPENSSL_SYS_WINDOWS) && 0 /* more microsoft stupidity? perhaps not? Ben 4/1/99 */		if ((i == -1) && (err == 0))			return(1);#endif		return(BIO_dgram_non_fatal_error(err));		}	return(0);	}int BIO_dgram_non_fatal_error(int err)	{	switch (err)		{#if defined(OPENSSL_SYS_WINDOWS)# if defined(WSAEWOULDBLOCK)	case WSAEWOULDBLOCK:# endif# if 0 /* This appears to always be an error */#  if defined(WSAENOTCONN)	case WSAENOTCONN:#  endif# endif#endif#ifdef EWOULDBLOCK# ifdef WSAEWOULDBLOCK#  if WSAEWOULDBLOCK != EWOULDBLOCK	case EWOULDBLOCK:#  endif# else	case EWOULDBLOCK:# endif#endif#if defined(ENOTCONN)	case ENOTCONN:#endif#ifdef EINTR	case EINTR:#endif#ifdef EAGAIN#if EWOULDBLOCK != EAGAIN	case EAGAIN:# endif#endif#ifdef EPROTO	case EPROTO:#endif#ifdef EINPROGRESS	case EINPROGRESS:#endif#ifdef EALREADY	case EALREADY:#endif/* DF bit set, and packet larger than MTU */#ifdef EMSGSIZE	case EMSGSIZE:#endif		return(1);		/* break; */	default:		break;		}	return(0);	}#endif

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃在线一区二区三区| 亚洲三级电影网站| 欧美日韩性生活| 欧美熟乱第一页| 欧美色区777第一页| 欧美在线制服丝袜| 91精品福利在线| 欧美三区在线观看| 制服.丝袜.亚洲.另类.中文 | 欧美老年两性高潮| 在线视频亚洲一区| 欧美日韩一区不卡| 欧美一区二区三区免费观看视频| 日韩欧美国产一区二区在线播放| 欧美xxx久久| 国产女同互慰高潮91漫画| 久久精品一区四区| 中文字幕一区二区三区av| 亚洲毛片av在线| 性久久久久久久久| 蜜臀av一区二区| 国产成人精品一区二区三区四区| 成人免费毛片高清视频| 94-欧美-setu| 欧美日韩你懂的| 欧美成人一级视频| 中文字幕乱码亚洲精品一区| 亚洲桃色在线一区| 日韩和欧美的一区| 国产在线不卡视频| 99精品偷自拍| 制服丝袜一区二区三区| 日本一区二区三区高清不卡| 亚洲一区二区三区在线看| 美洲天堂一区二卡三卡四卡视频 | 欧美精品乱码久久久久久| 欧美一级夜夜爽| 欧美—级在线免费片| 亚洲精品日日夜夜| 蜜臀久久久99精品久久久久久| 国产中文字幕精品| 欧美在线看片a免费观看| 日韩精品在线一区| 亚洲女与黑人做爰| 久久精品国产亚洲5555| 91亚洲精品久久久蜜桃网站| 制服丝袜日韩国产| 中文字幕日本不卡| 老色鬼精品视频在线观看播放| 懂色av噜噜一区二区三区av| 欧美精选一区二区| 国产欧美日韩在线| 亚洲成人综合在线| 成人综合激情网| 欧美日本在线视频| 国产精品久久久99| 奇米色一区二区三区四区| 99久久婷婷国产综合精品| 日韩精品一区二区三区蜜臀 | 亚洲成av人片在线| 成人网页在线观看| 日韩美女一区二区三区| 亚洲一区二区视频在线观看| 欧美精品九九99久久| 中文字幕在线不卡国产视频| 蜜桃视频在线观看一区二区| 色综合久久88色综合天天| 久久精品在线观看| 免费xxxx性欧美18vr| 91久久精品网| 日韩伦理免费电影| 国产成人午夜片在线观看高清观看| 欧美日韩一区二区在线观看视频| 国产精品热久久久久夜色精品三区 | 成人黄色a**站在线观看| 91精品国产综合久久蜜臀| 一区二区三区四区蜜桃| 成人午夜又粗又硬又大| 欧美videos中文字幕| 日韩在线一区二区三区| 欧美三区在线视频| 亚洲一区中文在线| 97成人超碰视| 亚洲欧洲美洲综合色网| 国产成人在线免费观看| 欧美成人乱码一区二区三区| 天天综合天天综合色| 欧美性生活影院| 亚洲精品国产第一综合99久久| 成人高清伦理免费影院在线观看| 久久精品欧美一区二区三区不卡| 久久国产精品一区二区| 欧美一级免费大片| 三级不卡在线观看| 欧美精品久久天天躁| 日韩精品三区四区| 欧美日韩亚洲综合一区| 亚洲h在线观看| 欧美美女bb生活片| 爽好久久久欧美精品| 欧美日韩国产美| 日韩精品久久久久久| 日韩一区二区免费在线电影| 日韩高清一区在线| 欧美一区二区私人影院日本| 婷婷综合在线观看| 日韩一区二区三区视频| 久久av老司机精品网站导航| 精品国产乱码久久| 国产精品亚洲视频| 国产欧美日韩三级| av影院午夜一区| 亚洲视频精选在线| 欧美性淫爽ww久久久久无| 亚洲va国产天堂va久久en| 91精品国产欧美一区二区| 麻豆成人在线观看| 久久美女高清视频| 成人综合在线观看| 一级女性全黄久久生活片免费| 欧美午夜理伦三级在线观看| 偷窥国产亚洲免费视频| 精品国产伦一区二区三区观看体验| 经典一区二区三区| 国产欧美日产一区| 色视频欧美一区二区三区| 亚洲6080在线| 精品国产乱码久久久久久牛牛 | 日韩你懂的在线播放| 国产精品白丝av| 亚洲码国产岛国毛片在线| 欧美日韩国产免费一区二区 | 国产一区二区三区四区五区入口| 国产精品乱码久久久久久| 欧洲精品一区二区| 欧美aⅴ一区二区三区视频| 国产日产精品1区| 91国在线观看| 黑人巨大精品欧美黑白配亚洲| 亚洲欧洲日韩av| 日韩一级片在线观看| 波多野结衣欧美| 日韩中文字幕1| 亚洲国产成人午夜在线一区| 欧美吞精做爰啪啪高潮| 国产一区二区日韩精品| 一区二区三区四区五区视频在线观看 | 欧美视频在线一区| 国产一区在线精品| 亚洲一区二区视频在线| 久久综合九色综合97婷婷女人| 99久久婷婷国产综合精品| 蜜桃精品视频在线| 最新热久久免费视频| 日韩一区二区免费电影| av一区二区三区在线| 开心九九激情九九欧美日韩精美视频电影| 国产色一区二区| 欧美精品黑人性xxxx| 99久久久久久99| 久久99国产精品久久99| 亚洲图片有声小说| 国产人久久人人人人爽| 欧美一卡在线观看| 在线影视一区二区三区| 国产福利一区二区三区| 日本va欧美va欧美va精品| 亚洲欧美激情在线| 精品av久久707| 欧美妇女性影城| 91污片在线观看| 国产a视频精品免费观看| 男男gaygay亚洲| 亚洲成av人影院| 亚洲免费成人av| 国产精品午夜春色av| 精品成人一区二区三区| 在线不卡中文字幕播放| 日本久久一区二区三区| 国产成人在线网站| 国精产品一区一区三区mba视频 | 精品一区二区免费在线观看| 亚洲午夜国产一区99re久久| 国产精品视频你懂的| 久久久久亚洲蜜桃| 欧美v国产在线一区二区三区| 欧美一区二区三区精品| 欧美三级三级三级| 日本大香伊一区二区三区| 成人激情校园春色| 国产成人精品免费看| 国产一区在线观看视频| 激情深爱一区二区| 麻豆高清免费国产一区| 日本不卡一区二区| 奇米综合一区二区三区精品视频| 午夜久久福利影院| 视频在线观看国产精品| 天堂资源在线中文精品| 午夜久久久影院|