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

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

?? socket.c

?? postgresql-odbc,跨平臺應用
?? C
?? 第 1 頁 / 共 2 頁
字號:
	}	return ret;}#ifdef USE_SSL/* *	The stuff for SSL. *//* included in  <openssl/ssl.h>#define SSL_ERROR_NONE			0#define SSL_ERROR_SSL			1#define SSL_ERROR_WANT_READ		2#define SSL_ERROR_WANT_WRITE		3#define SSL_ERROR_WANT_X509_LOOKUP	4#define SSL_ERROR_SYSCALL		5 // look at error stack/return value/errno#define SSL_ERROR_ZERO_RETURN		6#define SSL_ERROR_WANT_CONNECT		7#define SSL_ERROR_WANT_ACCEPT		8*//* *	recv more than 1 bytes using SSL. */static int SOCK_SSL_recv(SocketClass *sock, void *buffer, int len){	CSTR	func = "SOCK_SSL_recv";	int n, err, gerrno, retry_count = 0;retry:	n = SSL_read(sock->ssl, buffer, len);	err = SSL_get_error(sock->ssl, len);	gerrno = SOCK_ERRNO;inolog("%s: %d get_error=%d Lasterror=%d\n", func, n, err, gerrno);	switch (err)	{		case	SSL_ERROR_NONE:			break;		case	SSL_ERROR_WANT_READ:			retry_count++;			if (SOCK_wait_for_ready(sock, FALSE, retry_count) >= 0)				goto retry;			n = -1;			break;		case	SSL_ERROR_WANT_WRITE:			goto retry;			break;		case	SSL_ERROR_SYSCALL:			if (-1 != n)			{				n = -1;				SOCK_ERRNO_SET(ECONNRESET);			}			break;		case	SSL_ERROR_SSL:		case	SSL_ERROR_ZERO_RETURN:			n = -1;			SOCK_ERRNO_SET(ECONNRESET);			break;		default:			n = -1;	}	return n;}/* *	send more than 1 bytes using SSL. */static int SOCK_SSL_send(SocketClass *sock, void *buffer, int len){	CSTR	func = "SOCK_SSL_send";	int n, err, gerrno, retry_count = 0;retry:	n = SSL_write(sock->ssl, buffer, len);	err = SSL_get_error(sock->ssl, len);	gerrno = SOCK_ERRNO;inolog("%s: %d get_error=%d Lasterror=%d\n", func,  n, err, gerrno);	switch (err)	{		case	SSL_ERROR_NONE:			break;		case	SSL_ERROR_WANT_READ:		case	SSL_ERROR_WANT_WRITE:			retry_count++;			if (SOCK_wait_for_ready(sock, TRUE, retry_count) >= 0)				goto retry;			n = -1;			break;		case	SSL_ERROR_SYSCALL:			if (-1 != n)			{				n = -1;				SOCK_ERRNO_SET(ECONNRESET);			}			break;		case	SSL_ERROR_SSL:		case	SSL_ERROR_ZERO_RETURN:			n = -1;			SOCK_ERRNO_SET(ECONNRESET);			break;		default:			n = -1;	}	return n;}#endif /* USE_SSL */intSOCK_get_id(SocketClass *self){	int	id;	if (0 != self->errornumber)		return 0;	if (self->reslen > 0)	{		mylog("SOCK_get_id has to eat %d bytes\n", self->reslen);		do		{			SOCK_get_next_byte(self);			if (0 != self->errornumber)				return 0;		} while (self->reslen > 0);	}	id = SOCK_get_next_byte(self);	self->reslen = 0;	return id;}voidSOCK_get_n_char(SocketClass *self, char *buffer, Int4 len){	int			lf;	if (!self)		return;	if (!buffer)	{		SOCK_set_error(self, SOCKET_NULLPOINTER_PARAMETER, "get_n_char was called with NULL-Pointer");		return;	}	for (lf = 0; lf < len; lf++)	{		if (0 != self->errornumber)			break;		buffer[lf] = SOCK_get_next_byte(self);	}}voidSOCK_put_n_char(SocketClass *self, const char *buffer, Int4 len){	int			lf;	if (!self)		return;	if (!buffer)	{		SOCK_set_error(self, SOCKET_NULLPOINTER_PARAMETER, "put_n_char was called with NULL-Pointer");		return;	}	for (lf = 0; lf < len; lf++)	{		if (0 != self->errornumber)			break;		SOCK_put_next_byte(self, (UCHAR) buffer[lf]);	}}/* *	bufsize must include room for the null terminator *	will read at most bufsize-1 characters + null. *	returns TRUE if truncation occurs. */BOOLSOCK_get_string(SocketClass *self, char *buffer, Int4 bufsize){	int lf;	for (lf = 0; lf < bufsize - 1; lf++)		if (!(buffer[lf] = SOCK_get_next_byte(self)))			return FALSE;	buffer[bufsize - 1] = '\0';	return TRUE;}voidSOCK_put_string(SocketClass *self, const char *string){	size_t	lf, len;	len = strlen(string) + 1;	for (lf = 0; lf < len; lf++)	{		if (0 != self->errornumber)			break;		SOCK_put_next_byte(self, (UCHAR) string[lf]);	}}intSOCK_get_int(SocketClass *self, short len){	if (!self)		return 0;	switch (len)	{		case 2:			{				unsigned short buf;				SOCK_get_n_char(self, (char *) &buf, len);				if (self->reverse)					return buf;				else					return ntohs(buf);			}		case 4:			{				unsigned int buf;				SOCK_get_n_char(self, (char *) &buf, len);				if (self->reverse)					return buf;				else					return ntohl(buf);			}		default:			SOCK_set_error(self, SOCKET_GET_INT_WRONG_LENGTH, "Cannot read ints of that length");			return 0;	}}voidSOCK_put_int(SocketClass *self, int value, short len){	unsigned int rv;	if (!self)		return;	switch (len)	{		case 2:			rv = self->reverse ? value : htons((unsigned short) value);			SOCK_put_n_char(self, (char *) &rv, 2);			return;		case 4:			rv = self->reverse ? value : htonl((unsigned int) value);			SOCK_put_n_char(self, (char *) &rv, 4);			return;		default:			SOCK_set_error(self, SOCKET_PUT_INT_WRONG_LENGTH, "Cannot write ints of that length");			return;	}}Int4SOCK_flush_output(SocketClass *self){	int	written, pos = 0, retry_count = 0, ttlsnd = 0, gerrno;	if (!self)		return -1;	if (0 != self->errornumber)		return -1;	while (self->buffer_filled_out > 0)	{#ifdef USE_SSL 		if (self->ssl)			written = SOCK_SSL_send(self, (char *) self->buffer_out + pos, self->buffer_filled_out);		else#endif /* USE_SSL */			written = send(self->socket, (char *) self->buffer_out + pos, self->buffer_filled_out, 0);		gerrno = SOCK_ERRNO;		if (written < 0)		{			switch (gerrno)			{				case EINTR:					continue;					break;				case EWOULDBLOCK:					retry_count++;					if (SOCK_wait_for_ready(self, TRUE, retry_count) >= 0)						continue;					break;			}			SOCK_set_error(self, SOCKET_WRITE_ERROR, "Could not flush socket buffer.");			return -1;		}		pos += written;		self->buffer_filled_out -= written;		ttlsnd += written;		retry_count = 0;	}		return ttlsnd;}UCHARSOCK_get_next_byte(SocketClass *self){	int	retry_count = 0, gerrno;	BOOL	maybeEOF = FALSE;	if (!self)		return 0;	if (self->buffer_read_in >= self->buffer_filled_in)	{		/*		 * there are no more bytes left in the buffer so reload the buffer		 */		self->buffer_read_in = 0;retry:#ifdef USE_SSL 		if (self->ssl)			self->buffer_filled_in = SOCK_SSL_recv(self, (char *) self->buffer_in, self->buffer_size);		else#endif /* USE_SSL */			self->buffer_filled_in = recv(self->socket, (char *) self->buffer_in, self->buffer_size, 0);		gerrno = SOCK_ERRNO;		mylog("read %d, global_socket_buffersize=%d\n", self->buffer_filled_in, self->buffer_size);		if (self->buffer_filled_in < 0)		{mylog("Lasterror=%d\n", gerrno);			switch (gerrno)			{				case	EINTR:					goto retry;					break;				case	EWOULDBLOCK:					retry_count++;					if (SOCK_wait_for_ready(self, FALSE, retry_count) >= 0)						goto retry;					break;				case	ECONNRESET:inolog("ECONNRESET\n");					maybeEOF = TRUE;					SOCK_set_error(self, SOCKET_CLOSED, "Connection reset by peer.");					break;			}			if (0 == self->errornumber)				SOCK_set_error(self, SOCKET_READ_ERROR, "Error while reading from the socket.");			self->buffer_filled_in = 0;			return 0;		}		if (self->buffer_filled_in == 0)		{			if (!maybeEOF)			{				int	nbytes = SOCK_wait_for_ready(self, FALSE, 0);				if (nbytes > 0)				{					maybeEOF = TRUE;					goto retry;				}				else if (0 == nbytes)					maybeEOF = TRUE;			}			if (maybeEOF)				SOCK_set_error(self, SOCKET_CLOSED, "Socket has been closed.");			else				SOCK_set_error(self, SOCKET_READ_ERROR, "Error while reading from the socket.");			return 0;		}	}	if (PG_PROTOCOL_74 == self->pversion)		self->reslen--;	return self->buffer_in[self->buffer_read_in++];}voidSOCK_put_next_byte(SocketClass *self, UCHAR next_byte){	int	bytes_sent, pos = 0, retry_count = 0, gerrno;	if (!self)		return;	if (0 != self->errornumber)		return;	self->buffer_out[self->buffer_filled_out++] = next_byte;	if (self->buffer_filled_out == self->buffer_size)	{		/* buffer is full, so write it out */		do		{#ifdef USE_SSL			if (self->ssl)				bytes_sent = SOCK_SSL_send(self, (char *) self->buffer_out + pos, self->buffer_filled_out);			else#endif /* USE_SSL */				bytes_sent = send(self->socket, (char *) self->buffer_out + pos, self->buffer_filled_out, 0);			gerrno = SOCK_ERRNO;			if (bytes_sent < 0)			{				switch (gerrno)				{					case	EINTR:						continue;					case	EWOULDBLOCK:						retry_count++;						if (SOCK_wait_for_ready(self, TRUE, retry_count) >= 0)							continue;				}				if (0 == self->errornumber)					SOCK_set_error(self, SOCKET_WRITE_ERROR, "Error while writing to the socket.");				break;			}			pos += bytes_sent;			self->buffer_filled_out -= bytes_sent;			retry_count = 0;		} while (self->buffer_filled_out > 0);	}}Int4SOCK_get_response_length(SocketClass *self){	int     leng = -1;	if (PG_PROTOCOL_74 == self->pversion)	{		leng = SOCK_get_int(self, 4) - 4;		self->reslen = leng;	}	return leng;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美mv日韩mv国产网站app| 99久久精品国产毛片| 国产精品嫩草影院av蜜臀| 欧美三级视频在线| 成人av在线网站| 日本不卡一区二区| 亚洲精选视频在线| 国产欧美一区二区三区沐欲| 欧美三级三级三级| 91在线无精精品入口| 国产乱码精品一区二区三区av| 亚洲一区二区免费视频| 日本一区二区免费在线观看视频| 337p亚洲精品色噜噜| 色综合天天综合色综合av| 国产精品一区在线观看你懂的| 五月激情综合网| 亚洲精品乱码久久久久久黑人 | 日韩三级.com| 欧美性受xxxx黑人xyx| 97精品久久久久中文字幕| 国产成人精品免费| 韩国午夜理伦三级不卡影院| 日本视频一区二区三区| 亚洲一区二区成人在线观看| 亚洲色图清纯唯美| 国产女人aaa级久久久级| 久久男人中文字幕资源站| 欧美不卡视频一区| 日韩欧美精品在线| 日韩三级在线观看| 精品久久久三级丝袜| 欧美一区二区三区思思人| 欧美精品久久久久久久多人混战 | 欧美性猛交xxxx黑人交| 一本大道久久a久久精二百| 成人动漫精品一区二区| 成人午夜伦理影院| 丁香六月久久综合狠狠色| 国产成人av自拍| 成人a免费在线看| 成人高清av在线| 99热精品一区二区| 91在线一区二区三区| 91麻豆国产香蕉久久精品| 91免费看片在线观看| 色久综合一二码| 欧美性猛交xxxx乱大交退制版| 在线免费不卡视频| 欧美酷刑日本凌虐凌虐| 日韩午夜激情视频| 精品国产一区二区三区久久影院 | 一区二区三区四区乱视频| 亚洲一区免费视频| 中文字幕av一区二区三区高 | 亚洲欧美激情在线| 国产精品成人午夜| 亚洲男女毛片无遮挡| 亚洲男人的天堂在线aⅴ视频| 一区二区三区精品久久久| 日韩中文字幕亚洲一区二区va在线| 天天综合日日夜夜精品| 日本 国产 欧美色综合| 国产电影精品久久禁18| 成人av在线一区二区| 欧美在线制服丝袜| 精品久久一区二区三区| 国产精品入口麻豆原神| 一区二区三区 在线观看视频| 亚洲午夜一区二区| 国产一区二区精品久久91| 成人av网站大全| 欧美亚洲自拍偷拍| 亚洲精品在线网站| 亚洲精品你懂的| 久久狠狠亚洲综合| av爱爱亚洲一区| 666欧美在线视频| 国产精品一区二区三区四区| 无码av中文一区二区三区桃花岛| 久久精品免费看| 成人免费高清视频在线观看| 欧美中文字幕一二三区视频| 91麻豆精品国产自产在线| 国产亚洲婷婷免费| 亚洲成国产人片在线观看| 国产一区二区中文字幕| 色噜噜狠狠一区二区三区果冻| 91精品国产日韩91久久久久久| 国产精品理论片| 日本中文一区二区三区| 成a人片国产精品| 日韩精品专区在线影院重磅| 亚洲卡通欧美制服中文| 国产一区二区三区美女| 欧美日韩中文字幕一区| 国产精品久久久久久福利一牛影视| 日韩在线a电影| 色综合av在线| 国产日产精品1区| 免费久久精品视频| 一本大道久久a久久精品综合| 久久久亚洲高清| 爽好久久久欧美精品| 成人av资源在线| 精品久久国产老人久久综合| 亚洲与欧洲av电影| 99麻豆久久久国产精品免费| 精品欧美乱码久久久久久1区2区| 亚洲大片精品永久免费| 99精品视频一区二区| 久久蜜臀中文字幕| 老司机精品视频线观看86| 欧美日韩国产综合久久| 伊人婷婷欧美激情| 白白色 亚洲乱淫| 久久久精品国产免费观看同学| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲色图视频网站| 高清免费成人av| 久久精品夜夜夜夜久久| 另类调教123区| 欧美一区二区三区爱爱| 午夜精品久久久久久不卡8050| 色婷婷综合视频在线观看| 国产精品成人一区二区三区夜夜夜| 国产福利91精品| 国产欧美1区2区3区| 国产精品一区二区三区四区 | 久久久久久久免费视频了| 美国欧美日韩国产在线播放| 91精品在线一区二区| 日韩av电影免费观看高清完整版| 欧美视频一区二区三区四区| 亚洲综合色噜噜狠狠| 欧美日韩午夜精品| 午夜精品久久久久影视| 51久久夜色精品国产麻豆| 日韩精品福利网| 日韩三级精品电影久久久 | 欧美在线影院一区二区| 一二三四区精品视频| 欧美午夜视频网站| 日本美女视频一区二区| 精品乱人伦小说| 成人深夜福利app| 亚洲三级电影全部在线观看高清| 93久久精品日日躁夜夜躁欧美| 亚洲美女视频在线| 欧美人狂配大交3d怪物一区 | 国产**成人网毛片九色 | 精品一区二区三区免费视频| 久久久青草青青国产亚洲免观| 亚洲高清免费观看| 欧美丝袜丝交足nylons| 免费在线看一区| 久久一区二区视频| av激情综合网| 婷婷六月综合网| 久久这里只有精品6| 久久久久久久综合| 色综合色综合色综合色综合色综合 | 蜜桃一区二区三区在线观看| 久久午夜免费电影| 一本到高清视频免费精品| 日本一不卡视频| 国产精品美女久久久久高潮| 欧美综合在线视频| 久久精品999| 亚洲欧美日韩小说| 精品国产亚洲在线| 91污在线观看| 日本视频一区二区三区| 国产精品欧美综合在线| 欧美日韩国产综合视频在线观看| 国产一区二三区好的| 亚洲制服丝袜一区| 久久久久久久性| 日本韩国欧美在线| 亚洲中国最大av网站| 成人app在线观看| 欧美一区二区成人| eeuss鲁片一区二区三区| 性欧美疯狂xxxxbbbb| 国产欧美日本一区二区三区| 在线精品视频一区二区三四| 激情五月婷婷综合| 亚洲一线二线三线久久久| 国产亚洲欧美激情| 91精品在线麻豆| 91丨porny丨在线| 激情综合色播五月| 亚洲高清中文字幕| 国产精品天天摸av网| 精品久久久久久最新网址| 欧美性色黄大片| 成人动漫一区二区三区| 国产在线国偷精品免费看| 亚洲国产成人av| 国产精品国产三级国产aⅴ原创 |