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

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

?? socket.c

?? postgresql-odbc,跨平臺應用
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*------- * Module:			socket.c * * Description:		This module contains functions for low level socket *					operations (connecting/reading/writing to the backend) * * Classes:			SocketClass (Functions prefix: "SOCK_") * * API functions:	none * * Comments:		See "notice.txt" for copyright and license information. *------- */#include <libpq-fe.h>#include <openssl/ssl.h>#include "socket.h"#include "loadlib.h"#include "connection.h"#ifndef WIN32#include <stdlib.h>#include <string.h>				/* for memset */#ifdef TIME_WITH_SYS_TIME#include <sys/time.h>#include <time.h>#else#ifdef	HAVE_SYS_TIME_H#include <sys/time.h>#else#include <time.h>#endif /* HAVE_SYS_TIME_H */#endif /* TIME_WITH__SYS_TIME */#endif /* WIN32 */extern GLOBAL_VALUES globals;static void SOCK_set_error(SocketClass *s, int _no, const char *_msg){	int	gerrno = SOCK_ERRNO;	s->errornumber = _no;	if (NULL != s->_errormsg_)		free(s->_errormsg_);	if (NULL != _msg)		s->_errormsg_ = strdup(_msg);	else		s->_errormsg_ = NULL;	mylog("(%d)%s ERRNO=%d\n", _no, _msg, gerrno);}voidSOCK_clear_error(SocketClass *self){	self->errornumber = 0;	if (NULL != self->_errormsg_)		free(self->_errormsg_);	self->_errormsg_ = NULL;}SocketClass *SOCK_Constructor(const ConnectionClass *conn){	SocketClass *rv;	rv = (SocketClass *) malloc(sizeof(SocketClass));	if (rv != NULL)	{		rv->socket = (SOCKETFD) -1;		rv->via_libpq = FALSE;		rv->ssl = NULL;		rv->pqconn = NULL;		rv->pversion = 0;		rv->reslen = 0;		rv->buffer_filled_in = 0;		rv->buffer_filled_out = 0;		rv->buffer_read_in = 0;		if (conn)			rv->buffer_size = conn->connInfo.drivers.socket_buffersize;		else			rv->buffer_size = globals.socket_buffersize;		rv->buffer_in = (UCHAR *) malloc(rv->buffer_size);		if (!rv->buffer_in)		{			free(rv);			return NULL;		}		rv->buffer_out = (UCHAR *) malloc(rv->buffer_size);		if (!rv->buffer_out)		{			free(rv->buffer_in);			free(rv);			return NULL;		}		rv->_errormsg_ = NULL;		rv->errornumber = 0;		rv->reverse = FALSE;	}	return rv;}voidSOCK_Destructor(SocketClass *self){	mylog("SOCK_Destructor\n");	if (!self)		return;	if (self->socket != (SOCKETFD) -1)	{		if (self->pqconn)		{			if (self->via_libpq)			{				PQfinish(self->pqconn);				/* UnloadDelayLoadedDLLs(NULL != self->ssl); */			}			self->via_libpq = FALSE;			self->pqconn = NULL;			self->ssl = NULL;		}		else		{			SOCK_put_char(self, 'X');			if (PG_PROTOCOL_74 == self->pversion)				SOCK_put_int(self, 4, 4);			SOCK_flush_output(self);			closesocket(self->socket);		}	}	if (self->buffer_in)		free(self->buffer_in);	if (self->buffer_out)		free(self->buffer_out);	if (self->_errormsg_)		free(self->_errormsg_);	free(self);}#if defined(_MSC_VER) && (_MSC_VER < 1300)static freeaddrinfo_func freeaddrinfo_ptr = NULL;static getaddrinfo_func getaddrinfo_ptr = NULL;static getnameinfo_func getnameinfo_ptr = NULL;static	HMODULE ws2_hnd = NULL;#elsestatic freeaddrinfo_func freeaddrinfo_ptr = freeaddrinfo;static getaddrinfo_func getaddrinfo_ptr = getaddrinfo;static getnameinfo_func getnameinfo_ptr = getnameinfo;#endif /* _MSC_VER */static BOOL format_sockerr(char *errmsg, size_t buflen, int errnum, const char *cmd, const char *host, int portno){	BOOL ret = FALSE;#ifdef	WIN32	if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,		errnum, MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),		errmsg, (DWORD)buflen, NULL))		ret = TRUE;#else#if defined(POSIX_MULTITHREAD_SUPPORT) && defined(HAVE_STRERROR_R)#ifdef	STRERROR_R_INT	if (0 == strerror_r(errnum, errmsg, buflen))		ret = TRUE;#else	const char *pchar;	pchar = (const char *) strerror_r(errnum, errmsg, buflen);	if (NULL != pchar)	{		if (pchar != errmsg)			strncpy(errmsg, pchar, buflen);		ret = TRUE;	}#endif /* STRERROR_R_INT */#else	strncpy(errmsg, strerror(errnum), buflen);	ret = TRUE;#endif /* POSIX_MULTITHREAD_SUPPORT */#endif /* WIN32 */	if (ret)	{		size_t	tlen = strlen(errmsg);		errmsg += tlen;		buflen -= tlen;		snprintf(errmsg, buflen, " [%s:%d]", host, portno);	}	else		snprintf(errmsg, buflen, "%s failed for [%s:%d] ", cmd, host, portno);	return ret;} charSOCK_connect_to(SocketClass *self, unsigned short port, char *hostname, long timeout){	struct addrinfo	rest, *addrs = NULL, *curadr = NULL;	int	family = 0; 	char	retval = 0;	int	gerrno;	if (self->socket != (SOCKETFD) -1)	{		SOCK_set_error(self, SOCKET_ALREADY_CONNECTED, "Socket is already connected");		return 0;	}#if defined(_MSC_VER) && (_MSC_VER < 1300)	if (ws2_hnd == NULL)		ws2_hnd = GetModuleHandle("ws2_32.dll");	if (freeaddrinfo_ptr == NULL)		freeaddrinfo_ptr = (freeaddrinfo_func)GetProcAddress(ws2_hnd, "freeaddrinfo"); 	if (getaddrinfo_ptr == NULL)		getaddrinfo_ptr = (getaddrinfo_func)GetProcAddress(ws2_hnd, "getaddrinfo"); 	if (getnameinfo_ptr == NULL)		getnameinfo_ptr = (getnameinfo_func)GetProcAddress(ws2_hnd, "getnameinfo"); #endif	/*	 * Hostname lookup.	 */	if (hostname && hostname[0]#ifndef	WIN32	    && '/' != hostname[0]#endif /* WIN32 */	   )	{		char	portstr[16];		int	ret;		memset(&rest, 0, sizeof(rest));		rest.ai_socktype = SOCK_STREAM;		rest.ai_family = AF_UNSPEC;		snprintf(portstr, sizeof(portstr), "%d", port);		if (inet_addr(hostname) != INADDR_NONE)			rest.ai_flags |= AI_NUMERICHOST;			ret = getaddrinfo_ptr(hostname, portstr, &rest, &addrs);		if (ret || !addrs)		{			SOCK_set_error(self, SOCKET_HOST_NOT_FOUND, "Could not resolve hostname.");			if (addrs)				freeaddrinfo_ptr(addrs);			return 0;		}		curadr = addrs;	}	else#ifdef	HAVE_UNIX_SOCKETS	{		struct sockaddr_un *un = (struct sockaddr_un *) &(self->sadr_area);		family = un->sun_family = AF_UNIX;		/* passing NULL or '' means pg default "/tmp" */		UNIXSOCK_PATH(un, port, hostname);		self->sadr_len = UNIXSOCK_LEN(un);	}#else	{		SOCK_set_error(self, SOCKET_HOST_NOT_FOUND, "Hostname isn't specified.");		return 0;	}#endif /* HAVE_UNIX_SOCKETS */retry:	if (curadr)		family = curadr->ai_family;	self->socket = socket(family, SOCK_STREAM, 0);	if (self->socket == (SOCKETFD) -1)	{		SOCK_set_error(self, SOCKET_COULD_NOT_CREATE_SOCKET, "Could not create Socket.");		return 0;	}#ifdef	TCP_NODELAY	if (family != AF_UNIX)	{		int i;		socklen_t	len;		i = 1;		len = sizeof(i);		if (setsockopt(self->socket, IPPROTO_TCP, TCP_NODELAY, (char *) &i, len) < 0)		{			SOCK_set_error(self, SOCKET_COULD_NOT_CONNECT, "Could not set socket to NODELAY.");			closesocket(self->socket);			self->socket = (SOCKETFD) -1;			return 0;		}	}#endif /* TCP_NODELAY */#ifdef	WIN32	{		long	ioctlsocket_ret = 1;		/* Returns non-0 on failure, while fcntl() returns -1 on failure */		ioctlsocket(self->socket, FIONBIO, &ioctlsocket_ret);	}#else        fcntl(self->socket, F_SETFL, O_NONBLOCK);#endif	if (curadr)	{		struct sockaddr *in = (struct sockaddr *) &(self->sadr_area);		memset((char *) in, 0, sizeof(self->sadr_area));		memcpy(in, curadr->ai_addr, curadr->ai_addrlen);		self->sadr_len = (int) curadr->ai_addrlen;	}	if (connect(self->socket, (struct sockaddr *) &(self->sadr_area), self->sadr_len) < 0)	{		int	ret, optval;		fd_set	fds, except_fds;		struct	timeval	tm;		socklen_t	optlen = sizeof(optval);		time_t	t_now, t_finish = 0;		BOOL	tm_exp = FALSE;		gerrno = SOCK_ERRNO;		switch (gerrno)		{			case 0:			case EINPROGRESS:			case EINTR:			case EWOULDBLOCK:		    		break;			default:				SOCK_set_error(self, SOCKET_COULD_NOT_CONNECT, "Could not connect to remote socket immedaitely");				goto cleanup;		}		if (timeout > 0)		{			t_now = time(NULL);			t_finish = t_now + timeout;			tm.tv_sec = timeout;			tm.tv_usec = 0;		}		do {			FD_ZERO(&fds);			FD_ZERO(&except_fds);			FD_SET(self->socket, &fds);			FD_SET(self->socket, &except_fds);			ret = select((int) self->socket + 1, NULL, &fds, &except_fds, timeout > 0 ? &tm : NULL);			gerrno = SOCK_ERRNO;			if (0 < ret)				break;			else if (0 == ret)				tm_exp = TRUE;			else if (EINTR != gerrno)				break;			else if (timeout > 0)			{				if (t_now = time(NULL), t_now >= t_finish)					tm_exp = TRUE;				else				{					tm.tv_sec = (long) (t_finish - t_now);					tm.tv_usec = 0;				}			}		} while (!tm_exp);		if (tm_exp)		{			SOCK_set_error(self, SOCKET_COULD_NOT_CONNECT, "Could not connect .. timeout occured.");			goto cleanup;		}		else if (0 > ret)		{			SOCK_set_error(self, SOCKET_COULD_NOT_CONNECT, "Could not connect .. select error occured.");			mylog("select error ret=%d ERROR=%d\n", ret, gerrno);			goto cleanup;		}		if (getsockopt(self->socket, SOL_SOCKET, SO_ERROR,				(char *) &optval, &optlen) == -1)		{			SOCK_set_error(self, SOCKET_COULD_NOT_CONNECT, "Could not connect .. getsockopt error.");		}		else if (optval != 0)		{			char	errmsg[256], host[64];			host[0] = '\0';			getnameinfo_ptr((struct sockaddr *) &(self->sadr_area),					self->sadr_len, host, sizeof(host),					NULL, 0, NI_NUMERICHOST);			/* snprintf(errmsg, sizeof(errmsg), "connect getsockopt val %d addr=%s\n", optval, host); */			format_sockerr(errmsg, sizeof(errmsg), optval, "connect", host, port);			mylog(errmsg);			SOCK_set_error(self, SOCKET_COULD_NOT_CONNECT, errmsg);		}		else			retval = 1;	}	else		retval = 1;cleanup:	if (0 == retval)	{		if (self->socket >= 0)		{			closesocket(self->socket);			self->socket = (SOCKETFD) -1;		}		if (curadr && curadr->ai_next)		{			curadr = curadr->ai_next;			goto retry;		}	}	else		SOCK_set_error(self, 0, NULL);		if (addrs)		freeaddrinfo_ptr(addrs);	return retval;}/* *	To handle EWOULDBLOCK etc (mainly for libpq non-blocking connection). */#define	MAX_RETRY_COUNT	30static int SOCK_wait_for_ready(SocketClass *sock, BOOL output, int retry_count){	int	ret, gerrno;	fd_set	fds, except_fds;	struct	timeval	tm;	BOOL	no_timeout = (0 != retry_count && (retry_count < 0 || (!sock->ssl)));	do {		FD_ZERO(&fds);		FD_ZERO(&except_fds);		FD_SET(sock->socket, &fds);		FD_SET(sock->socket, &except_fds);		if (!no_timeout)		{			tm.tv_sec = retry_count;			tm.tv_usec = 0;		}		ret = select((int)sock->socket + 1, output ? NULL : &fds, output ? &fds : NULL, &except_fds, no_timeout ? NULL : &tm);		gerrno = SOCK_ERRNO;	} while (ret < 0 && EINTR == gerrno);	if (retry_count < 0)		retry_count *= -1;	if (0 == ret && retry_count > MAX_RETRY_COUNT)	{		ret = -1;		SOCK_set_error(sock, output ? SOCKET_WRITE_TIMEOUT : SOCKET_READ_TIMEOUT, "SOCK_wait_for_ready timeout");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品福利一区二区三区| 99久久777色| 最新高清无码专区| 国产精品久久精品日日| 成a人片国产精品| 91视频免费看| 3atv一区二区三区| 国产午夜精品理论片a级大结局| 亚洲精品一区二区在线观看| 日韩一区二区三区电影在线观看| 日韩欧美电影一区| 日韩欧美第一区| 日韩色在线观看| 国产精品少妇自拍| 亚洲综合色在线| 久久国产精品99久久久久久老狼| 欧美国产国产综合| 在线观看网站黄不卡| 日韩午夜激情av| 2014亚洲片线观看视频免费| 99综合电影在线视频| 色爱区综合激月婷婷| 91精品国产综合久久久蜜臀粉嫩| 久久影音资源网| 国产精品乱码久久久久久| 久久夜色精品国产噜噜av | ww亚洲ww在线观看国产| 亚洲欧洲精品成人久久奇米网| 亚洲国产aⅴ成人精品无吗| 精品一区二区三区在线视频| 色就色 综合激情| 一区在线中文字幕| 亚洲摸摸操操av| 国产精品自拍av| 精品欧美一区二区在线观看| 亚洲精品成人a在线观看| 国产成人8x视频一区二区| 日韩欧美在线不卡| 免费观看成人av| 91精品国产综合久久久久久漫画| 亚洲宅男天堂在线观看无病毒| 久久er精品视频| 在线不卡欧美精品一区二区三区| 精品国产电影一区二区| 一区二区三区**美女毛片| 国产91精品一区二区麻豆亚洲| 久久综合一区二区| 一本大道久久a久久精品综合| 中文字幕综合网| 欧美精品 国产精品| 免费成人在线网站| 国产视频一区二区三区在线观看| 久久国产精品99精品国产| 欧美在线观看视频一区二区 | 国产精品免费网站在线观看| 麻豆精品在线播放| 久久久www免费人成精品| 国产91丝袜在线播放| 国产亚洲精久久久久久| 东方aⅴ免费观看久久av| 日本一区二区三区电影| 成人黄色在线看| 久久福利视频一区二区| 国产精品欧美综合在线| 91蝌蚪porny九色| 激情综合五月天| 国产亚洲综合av| 欧美三级欧美一级| 久国产精品韩国三级视频| 国产亚洲福利社区一区| 色综合中文综合网| 日本一区二区成人| 成人在线综合网| 无码av免费一区二区三区试看| 精品少妇一区二区| 韩国一区二区视频| 亚洲在线视频免费观看| 欧美激情综合网| 色综合天天综合在线视频| 精品一区二区三区不卡| 亚洲自拍另类综合| 亚洲一区欧美一区| 亚洲1区2区3区视频| 亚洲欧洲韩国日本视频| 欧美极品美女视频| 国产精品久久久久久福利一牛影视 | 久久网这里都是精品| 制服丝袜在线91| 色偷偷久久人人79超碰人人澡| 日本v片在线高清不卡在线观看| 一区二区三区久久久| 午夜久久久久久久久久一区二区| 亚洲一区在线观看免费观看电影高清| 亚洲视频免费看| 国产精品久久久久久久久果冻传媒| 日韩天堂在线观看| 欧美精品乱码久久久久久| 欧美人xxxx| 国产亚洲综合在线| 亚洲精品自拍动漫在线| 亚洲一区二区三区四区五区黄| 精品国产乱码久久久久久浪潮| 国产日韩精品一区二区浪潮av| 亚洲视频每日更新| 亚洲一卡二卡三卡四卡无卡久久| 蜜桃av噜噜一区二区三区小说| 久久精品噜噜噜成人av农村| 成人涩涩免费视频| 91国产免费观看| www一区二区| 亚洲欧美偷拍卡通变态| 亚洲一二三四在线| 国产精品白丝jk白祙喷水网站| 国产一区二区三区久久悠悠色av| 99久久久久免费精品国产| 欧美老年两性高潮| 欧美经典一区二区| 亚洲欧洲日韩av| 久国产精品韩国三级视频| 欧美日韩高清不卡| 久久久久久久综合日本| 亚洲黄色在线视频| 无码av免费一区二区三区试看 | 91久久一区二区| 一色桃子久久精品亚洲| 国产成人鲁色资源国产91色综 | 欧美午夜在线观看| 国产精品美女一区二区三区 | 亚洲成人免费视| 成人av网站在线观看免费| 国产精品麻豆视频| 色婷婷综合久久久久中文一区二区 | 国产精品一区久久久久| 久久亚区不卡日本| 精品中文字幕一区二区小辣椒| 在线视频中文字幕一区二区| 精品盗摄一区二区三区| 亚洲欧美日韩电影| 粉嫩av一区二区三区在线播放| 精品国精品自拍自在线| 污片在线观看一区二区| 日韩精品一区在线| 日本最新不卡在线| 日韩欧美国产成人一区二区| 日韩不卡一区二区三区| 久久久久久夜精品精品免费| 麻豆传媒一区二区三区| 国产精品久久久久久久久晋中 | 亚洲国产人成综合网站| 粉嫩久久99精品久久久久久夜| 日本一区二区三区国色天香| 91在线观看成人| 乱中年女人伦av一区二区| 精品国产乱码久久久久久牛牛 | 成人av手机在线观看| 天天综合色天天| 国产精品色哟哟网站| 欧美剧情片在线观看| 国产激情视频一区二区三区欧美| 亚洲午夜视频在线观看| 717成人午夜免费福利电影| 久久黄色级2电影| 亚洲大片精品永久免费| 国产精品三级视频| 欧美不卡一二三| caoporn国产精品| 精品中文字幕一区二区小辣椒| 亚洲精品乱码久久久久| 亚洲婷婷在线视频| 色诱视频网站一区| 狠狠色综合播放一区二区| 亚洲国产一区二区视频| 一色桃子久久精品亚洲| 2023国产精品视频| 精品国产乱码久久久久久夜甘婷婷| 欧美私模裸体表演在线观看| 色综合中文字幕国产 | 欧美精品亚洲一区二区在线播放| 成人av电影在线观看| 福利视频网站一区二区三区| 国产精品66部| 91麻豆.com| 欧美日韩精品福利| 日韩欧美一区二区久久婷婷| 91精品国产综合久久香蕉的特点| 91精品国产乱码| 久久综合久久综合久久| 久久久不卡网国产精品二区| 国产夜色精品一区二区av| 中文字幕一区二区三中文字幕| 亚洲人成人一区二区在线观看| 一区二区三区中文字幕精品精品 | 欧美日本一区二区在线观看| 欧美久久久久久久久| 久久综合九色综合欧美就去吻 | 国产精品77777| 欧美精品高清视频| 国产欧美一区在线| 日韩电影一区二区三区四区| 久久99精品国产|