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

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

?? ipcsocket.c

?? linux集群服務器軟件代碼包
?? C
?? 第 1 頁 / 共 4 頁
字號:
	&&	ch->send_queue->current_qlen > 0){		if (socket_resume_io(ch) != IPC_OK){			break;		}	}	socket_disconnect(ch);	socket_destroy_queue(ch->send_queue);	socket_destroy_queue(ch->recv_queue);	if (ch->ch_private != NULL) {		struct SOCKET_CH_PRIVATE *priv = (struct SOCKET_CH_PRIVATE *)			ch->ch_private;		if(priv->peer_addr != NULL) {			unlink(priv->peer_addr->sun_path);			g_free((void*)(priv->peer_addr));		}    		g_free((void*)(ch->ch_private));			}	memset(ch, 0xff, sizeof(*ch));	g_free((void*)ch);}/*  * Called by socket_destory(). Disconnect the connection  * and set ch_status to IPC_DISCONNECT.  * * parameters : *     ch (IN) the pointer to the channel. * * return values :  *     IPC_OK   the connection is disconnected successfully. *      IPC_FAIL     operation fails.*/static intsocket_disconnect(struct IPC_CHANNEL* ch){	struct SOCKET_CH_PRIVATE* conn_info;	conn_info = (struct SOCKET_CH_PRIVATE*) ch->ch_private;#if 0	if (ch->ch_status != IPC_DISCONNECT) {  		cl_log(LOG_INFO, "forced disconnect for fd %d", conn_info->s);	}#endif	close(conn_info->s);	cl_poll_ignore(conn_info->s);	conn_info->s = -1;	ch->ch_status = IPC_DISCONNECT;	return IPC_OK;}static intsocket_check_disc_pending(struct IPC_CHANNEL* ch){	int		rc;	struct pollfd	sockpoll;	if (ch->ch_status == IPC_DISCONNECT) {		cl_log(LOG_ERR, "check_disc_pending() already disconnected");		return IPC_BROKEN;	}	if (ch->recv_queue->current_qlen > 0) {		return IPC_OK;	}	sockpoll.fd = ch->ops->get_recv_select_fd(ch);	sockpoll.events = POLLIN;	rc = ipc_pollfunc_ptr(&sockpoll, 1, 0); 	if (rc < 0) {		cl_log(LOG_INFO		,	"socket_check_disc_pending() bad poll call");		ch->ch_status = IPC_DISCONNECT; 		return IPC_BROKEN;	}		if (sockpoll.revents & POLLHUP) {		if (sockpoll.revents & POLLIN) {			ch->ch_status = IPC_DISC_PENDING;		}else{#if 1			cl_log(LOG_INFO, "HUP without input");#endif			ch->ch_status = IPC_DISCONNECT;			return IPC_BROKEN;		}	}	if (sockpoll.revents & POLLIN) {		int dummy;		socket_resume_io_read(ch, &dummy, FALSE);	}	return IPC_OK;}static int socket_initiate_connection(struct IPC_CHANNEL * ch){	struct SOCKET_CH_PRIVATE* conn_info;  	struct sockaddr_un peer_addr; /* connector's address information */  	conn_info = (struct SOCKET_CH_PRIVATE*) ch->ch_private;  	/* Prepare the socket */	memset(&peer_addr, 0, sizeof(peer_addr));	peer_addr.sun_family = AF_LOCAL;    /* host byte order */ 	if (strlen(conn_info->path_name) >= sizeof(peer_addr.sun_path)) {		return IPC_FAIL;	}	strncpy(peer_addr.sun_path, conn_info->path_name, sizeof(peer_addr.sun_path));	/* Send connection request */	if (connect(conn_info->s, (struct sockaddr *)&peer_addr	, 	sizeof(struct sockaddr_un)) == -1) {		cl_log(LOG_WARNING, "initiate_connection: connect failure: %s", strerror(errno) );		return IPC_FAIL;	}	ch->ch_status = IPC_CONNECT;	ch->farside_pid = socket_get_farside_pid(conn_info->s);	return IPC_OK;}static voidsocket_set_high_flow_callback(IPC_Channel* ch,			      flow_callback_t callback,			      void* userdata){		ch->high_flow_callback = callback;	ch->high_flow_userdata = userdata;	}static voidsocket_set_low_flow_callback(IPC_Channel* ch,			     flow_callback_t callback,			     void* userdata){		ch->low_flow_callback = callback;	ch->low_flow_userdata = userdata;	}static voidsocket_check_flow_control(struct IPC_CHANNEL* ch, 			  int orig_qlen, 			  int curr_qlen){	if (!IPC_ISRCONN(ch)) {		return;	}	if (curr_qlen >= ch->high_flow_mark	    && ch->high_flow_callback){			ch->high_flow_callback(ch, ch->high_flow_userdata);	} 		if (curr_qlen <= ch->low_flow_mark	    && orig_qlen > ch->low_flow_mark	    && ch->low_flow_callback){		ch->low_flow_callback(ch, ch->low_flow_userdata);	       	}					return;	}static int socket_send(struct IPC_CHANNEL * ch, struct IPC_MESSAGE* msg){	int orig_qlen;		if (msg->msg_len < 0 || msg->msg_len > MAXDATASIZE) {		cl_log(LOG_ERR, "socket_send: "		       "invalid message");		       		return IPC_FAIL;	}		if (ch->ch_status != IPC_CONNECT){		return IPC_FAIL;	}		ch->ops->resume_io(ch);	if ( !ch->should_send_blocking &&	    ch->send_queue->current_qlen >= ch->send_queue->max_qlen) {		/*cl_log(LOG_WARNING, "send queue maximum length(%d) exceeded",		  ch->send_queue->max_qlen );*/		return IPC_FAIL;	}		while (ch->send_queue->current_qlen >= ch->send_queue->max_qlen){		cl_shortsleep();		ch->ops->resume_io(ch);	}		/* add the message into the send queue */	CHECKFOO(0,ch, msg, SavedQueuedBody, "queued message");	SocketIPCStats.noutqueued++;	ch->send_queue->queue = g_list_append(ch->send_queue->queue,					      msg);	orig_qlen = ch->send_queue->current_qlen++;		socket_check_flow_control(ch, orig_qlen, orig_qlen +1 );		/* resume io */	ch->ops->resume_io(ch);	return IPC_OK;  }static int socket_recv(struct IPC_CHANNEL * ch, struct IPC_MESSAGE** message){	GList *element;	int		nbytes;	int		result;		socket_resume_io(ch);	result = socket_resume_io_read(ch, &nbytes, TRUE);	*message = NULL;	if (ch->recv_queue->current_qlen == 0) {		return result != IPC_OK ? result : IPC_FAIL;		/*return IPC_OK;*/	}	element = g_list_first(ch->recv_queue->queue);	if (element == NULL) {		/* Internal accounting error, but correctable */		cl_log(LOG_ERR		, "recv failure: qlen (%d) > 0, but no message found."		,	ch->recv_queue->current_qlen);		ch->recv_queue->current_qlen = 0;		return IPC_FAIL;	}	*message = (struct IPC_MESSAGE *) (element->data);	CHECKFOO(1,ch, *message, SavedReadBody, "read message");	SocketIPCStats.nreceived++;	ch->recv_queue->queue =	g_list_remove(ch->recv_queue->queue	,	element->data);	ch->recv_queue->current_qlen--;	return IPC_OK;}static intsocket_check_poll(struct IPC_CHANNEL * ch,		struct pollfd * sockpoll){	if (ch->ch_status == IPC_DISCONNECT) {		return IPC_OK;	}	if (sockpoll->revents & POLLHUP) {		/* If input present, or this is an output-only poll... */		if (sockpoll->revents & POLLIN		|| (sockpoll-> events & POLLIN) == 0 ) {			ch->ch_status = IPC_DISC_PENDING;			return IPC_OK;		}#if 1		cl_log(LOG_INFO, "socket_check_poll(): HUP without input");#endif		ch->ch_status = IPC_DISCONNECT;		return IPC_BROKEN;	}else if (sockpoll->revents & (POLLNVAL|POLLERR)) {		/* Have we already closed the socket? */		if (fcntl(sockpoll->fd, F_GETFL) < 0) {			cl_perror("socket_check_poll(pid %d): bad fd [%d]"			,	(int) getpid(), sockpoll->fd);			ch->ch_status = IPC_DISCONNECT;			return IPC_OK;		}		cl_log(LOG_ERR		,	"revents failure: fd %d, flags 0x%x"		,	sockpoll->fd, sockpoll->revents);		errno = EINVAL;		return IPC_FAIL;	}	return IPC_OK;}static intsocket_waitfor(struct IPC_CHANNEL * ch,	gboolean (*finished)(struct IPC_CHANNEL * ch)){	struct pollfd sockpoll;	CHANAUDIT(ch);	if (finished(ch)) {		return IPC_OK;	} 	if (ch->ch_status == IPC_DISCONNECT) { 		return IPC_BROKEN;	}	sockpoll.fd = ch->ops->get_recv_select_fd(ch);		while (!finished(ch) &&	IPC_ISRCONN(ch)) {		int	rc;		sockpoll.events = POLLIN;				/* Cannot call resume_io after the call to finished()		 * and before the call to poll because we might		 * change the state of the thing finished() is		 * waiting for.		 * This means that the poll call below would be		 * not only pointless, but might		 * make us hang forever waiting for this		 * event which has already happened		 */		if (ch->send_queue->current_qlen > 0) {			sockpoll.events |= POLLOUT;		}				rc = ipc_pollfunc_ptr(&sockpoll, 1, -1);				if (rc < 0) {			return (errno == EINTR ? IPC_INTR : IPC_FAIL);		}		rc = socket_check_poll(ch, &sockpoll);		if (sockpoll.revents & POLLIN) {			socket_resume_io(ch);		}		if (rc != IPC_OK) {			CHANAUDIT(ch);			return rc;		}	}	CHANAUDIT(ch);	return IPC_OK;}static intsocket_waitin(struct IPC_CHANNEL * ch){	return socket_waitfor(ch, ch->ops->is_message_pending);}static gbooleansocket_is_output_flushed(struct IPC_CHANNEL * ch){	return ! ch->ops->is_sending_blocked(ch);}static intsocket_waitout(struct IPC_CHANNEL * ch){	int	rc;	CHANAUDIT(ch);	rc = socket_waitfor(ch, socket_is_output_flushed);	if (rc != IPC_OK) {		cl_log(LOG_ERR		,	"socket_waitout failure: rc = %d", rc);	}else if (ch->ops->is_sending_blocked(ch)) {		cl_log(LOG_ERR, "socket_waitout output still blocked");	}	CHANAUDIT(ch);	return rc;}static gbooleansocket_is_message_pending(struct IPC_CHANNEL * ch){	ch->ops->resume_io(ch);	if (ch->recv_queue->current_qlen > 0) {		return TRUE;	}	return !IPC_ISRCONN(ch);}static gbooleansocket_is_output_pending(struct IPC_CHANNEL * ch){	socket_resume_io(ch);	return 	ch->ch_status == IPC_CONNECT	&&	 ch->send_queue->current_qlen > 0;}static int socket_assert_auth(struct IPC_CHANNEL *ch, GHashTable *auth){	cl_log(LOG_ERR	, "the assert_auth function for domain socket is not implemented");	return IPC_FAIL;}static intsocket_resume_io_read(struct IPC_CHANNEL *ch, int* nbytes, gboolean read1anyway){	struct SOCKET_CH_PRIVATE*	conn_info;	int				retcode = IPC_OK;	struct pollfd			sockpoll;	int				debug_loopcount = 0;	int				debug_bytecount = 0;	int				maxqlen = ch->recv_queue->max_qlen;	struct ipc_bufpool*		pool = ch->pool;	int				nmsgs = 0;	int				spaceneeded;	*nbytes = 0;		CHANAUDIT(ch);	conn_info = (struct SOCKET_CH_PRIVATE *) ch->ch_private;	if (ch->ch_status == IPC_DISCONNECT) {		return IPC_BROKEN;	}		if (pool == NULL){		ch->pool = pool = ipc_bufpool_new(0);		if (pool == NULL){						cl_log(LOG_ERR, "socket_resume_io_read: "			       "memory allocation for ipc pool failed");			exit(1);		}	}		if (ipc_bufpool_full(pool, ch, &spaceneeded)){				struct ipc_bufpool*	newpool;				newpool = ipc_bufpool_new(spaceneeded);		if (newpool == NULL){						cl_log(LOG_ERR, "socket_resume_io_read: "			       "memory allocation for a new ipc pool failed");			exit(1);		}				ipc_bufpool_partial_copy(newpool, pool);		ipc_bufpool_unref(pool);		ch->pool = pool = newpool;	}			if (maxqlen <= 0 && read1anyway) {		maxqlen = 1;	}  	if (ch->recv_queue->current_qlen < maxqlen && retcode == IPC_OK) {				void *				msg_begin;		int				msg_len;		int				len;		CHANAUDIT(ch);		++debug_loopcount;		len = ipc_bufpool_spaceleft(pool);		msg_begin = pool->currpos;				CHANAUDIT(ch);				/* Now try to receive some data */		msg_len = recv(conn_info->s, msg_begin, len, MSG_DONTWAIT);		SocketIPCStats.last_recv_rc = msg_len;		SocketIPCStats.last_recv_errno = errno;		++SocketIPCStats.recv_count;				/* Did we get an error? */		if (msg_len < 0) {			switch (errno) {			case EAGAIN:				if (ch->ch_status==IPC_DISC_PENDING){					ch->ch_status =IPC_DISCONNECT;					retcode = IPC_BROKEN;				}				break;									case ECONNREFUSED:			case ECONNRESET:				retcode= socket_check_disc_pending(ch);				break;							default:				cl_perror("socket_resume_io_read"					  ": unknown recv error");				ch->ch_status = IPC_DISCONNECT;				retcode = IPC_FAIL;				break;			}					}else if (msg_len == 0) {			if (ch->ch_status == IPC_DISC_PENDING			    &&	ch->recv_queue->current_qlen <= 0) {				ch->ch_status = IPC_DISCONNECT;				retcode = IPC_FAIL;			}		}else {			/* We read something! */			/* Note that all previous cases break out of the loop */			debug_bytecount += msg_len;			*nbytes = msg_len;			nmsgs = ipc_bufpool_update(pool, ch, msg_len, ch->recv_queue) ;						SocketIPCStats.ninqueued += nmsgs;					}	}	/* Check for errors uncaught by recv() */	/* NOTE: It doesn't seem right we have to do this every time */	/* FIXME?? */		memset(&sockpoll,0, sizeof(struct pollfd));		if ((retcode == IPC_OK) 	&&	(sockpoll.fd = conn_info->s) >= 0) {		/* Just check for errors, not for data */		sockpoll.events = 0;		ipc_pollfunc_ptr(&sockpoll, 1, 0);		retcode = socket_check_poll(ch, &sockpoll);	}		CHANAUDIT(ch);	if (retcode != IPC_OK) {		return retcode;	}	return IPC_ISRCONN(ch) ? IPC_OK : IPC_BROKEN;}static intsocket_resume_io_write(struct IPC_CHANNEL *ch, int* nmsg){	int				retcode = IPC_OK;	struct SOCKET_CH_PRIVATE*	conn_info;			CHANAUDIT(ch);	*nmsg = 0;	conn_info = (struct SOCKET_CH_PRIVATE *) ch->ch_private;   	while (ch->ch_status == IPC_CONNECT	&&		retcode == IPC_OK	&&		ch->send_queue->current_qlen > 0) {		GList *				element;		struct IPC_MESSAGE *		msg;		struct SOCKET_MSG_HEAD*		head;                struct IPC_MESSAGE* 		oldmsg = NULL;		int				sendrc = 0;                struct IPC_MESSAGE* 		newmsg;		char*				p;		unsigned int			bytes_remaining;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲1区2区3区视频| 在线中文字幕一区| 免费久久99精品国产| 亚洲国产中文字幕在线视频综合| 一区二区中文字幕在线| 国产精品萝li| 国产精品久久99| 最好看的中文字幕久久| 日韩毛片在线免费观看| 亚洲婷婷在线视频| 亚洲色图视频免费播放| 亚洲品质自拍视频| 一区二区三区在线播| 亚洲影视在线播放| 日韩中文欧美在线| 蜜桃视频在线观看一区| av亚洲精华国产精华精华| 成人国产精品免费观看视频| 成人精品视频.| 91麻豆国产在线观看| 欧美特级限制片免费在线观看| 欧美日本国产视频| 日韩精品一区二区三区视频播放| 精品久久免费看| 欧美国产1区2区| 亚洲人吸女人奶水| 午夜精品久久久久影视| 久久国产生活片100| 国产麻豆精品一区二区| 成人av电影在线播放| 色88888久久久久久影院野外| 91成人免费网站| 日韩女优电影在线观看| 亚洲国产成人在线| 亚洲线精品一区二区三区八戒| 日韩国产精品久久久| 韩国女主播成人在线| 99久久99久久综合| 欧美日韩高清在线播放| 精品国产乱码久久久久久夜甘婷婷| 久久精品人人爽人人爽| 亚洲丝袜自拍清纯另类| 视频一区二区不卡| 高清在线成人网| 欧美中文字幕一区二区三区 | 日韩制服丝袜av| 国产美女精品在线| 欧美性色黄大片手机版| 欧美成人一区二区| 中文字幕日本乱码精品影院| 青娱乐精品视频在线| 成年人午夜久久久| 91精品国产一区二区三区蜜臀| 日本一区二区三区久久久久久久久不| 一区二区不卡在线播放 | 日本女人一区二区三区| 国产91综合一区在线观看| 欧美日韩一区在线| 国产无遮挡一区二区三区毛片日本| 亚洲色欲色欲www| 美女性感视频久久| 91免费在线看| 久久久久久久久久久久久夜| 亚洲午夜一区二区三区| 国产91在线|亚洲| 欧美一区二区三区人| 17c精品麻豆一区二区免费| 日本va欧美va精品| 91美女在线看| 久久久国产精品不卡| 成人午夜激情在线| 欧美大胆人体bbbb| 夜夜嗨av一区二区三区中文字幕| 精品亚洲免费视频| 欧美色爱综合网| 日韩理论片中文av| 懂色av一区二区三区免费看| 欧美一卡二卡三卡| 亚洲国产色一区| av在线不卡观看免费观看| 精品福利av导航| 美国毛片一区二区| 欧美乱妇15p| 亚洲综合无码一区二区| 91在线精品一区二区| 久久久777精品电影网影网 | 日本道色综合久久| 国产欧美在线观看一区| 国内成人自拍视频| 日韩一卡二卡三卡国产欧美| 亚洲成av人综合在线观看| 一本一道波多野结衣一区二区| 中文字幕欧美日本乱码一线二线| 久国产精品韩国三级视频| 91精品欧美综合在线观看最新| 一区二区三区.www| 色综合天天性综合| 亚洲人成在线播放网站岛国| 成人网在线免费视频| 国产视频在线观看一区二区三区 | 老司机免费视频一区二区三区| 欧美日韩国产a| 午夜欧美大尺度福利影院在线看| 色94色欧美sute亚洲线路一久| 自拍偷拍国产亚洲| 97超碰欧美中文字幕| 1000精品久久久久久久久| 91社区在线播放| 亚洲伊人色欲综合网| 欧美日韩一二三区| 青青草国产成人99久久| 精品免费视频一区二区| 国产精品伊人色| 国产欧美一二三区| av在线播放不卡| 亚洲一区二区三区免费视频| 欧美日韩国产高清一区二区三区| 亚洲成人av一区| 日韩写真欧美这视频| 久久99国产精品成人| 久久久久久久久97黄色工厂| 国产不卡高清在线观看视频| 国产精品丝袜黑色高跟| 91丨porny丨在线| 亚洲一区二区三区中文字幕 | 69p69国产精品| 日本女人一区二区三区| 久久新电视剧免费观看| 成人网男人的天堂| 毛片av一区二区三区| 久久久99免费| 99久久免费视频.com| 亚洲国产美国国产综合一区二区| 在线不卡欧美精品一区二区三区| 美女久久久精品| 国产午夜精品久久久久久免费视 | 欧美天天综合网| 激情小说欧美图片| 国产精品理论在线观看| 欧美特级限制片免费在线观看| 美腿丝袜在线亚洲一区| 中文字幕不卡在线观看| 欧美亚洲日本国产| 精品在线免费视频| 国产精品二区一区二区aⅴ污介绍| 欧美在线观看视频在线| 美女网站色91| 中文字幕一区二区三区不卡 | 日韩精品专区在线| 成人高清在线视频| 日韩激情在线观看| 国产丝袜美腿一区二区三区| 欧美性受xxxx| 国产精品一区二区视频| 亚洲另类在线制服丝袜| 日韩欧美国产综合在线一区二区三区| 成人动漫视频在线| 日韩二区三区四区| 专区另类欧美日韩| 欧美大片国产精品| 欧美吻胸吃奶大尺度电影| 国产精品夜夜嗨| 偷拍亚洲欧洲综合| 中文字幕一区av| 精品欧美一区二区三区精品久久 | 成人黄色一级视频| 日韩精品色哟哟| 中文字幕色av一区二区三区| 日韩欧美国产电影| 91国模大尺度私拍在线视频| 国产乱码精品一区二区三区忘忧草| 一区二区三区欧美视频| 国产三级精品在线| 日韩视频一区在线观看| 欧美亚洲综合色| 99精品视频免费在线观看| 国模一区二区三区白浆| 亚洲成在线观看| 亚洲精品国产一区二区精华液| 久久久久97国产精华液好用吗| 欧美日本一区二区三区| 91免费观看视频| 国产成人av电影| 久久精品二区亚洲w码| 亚洲成av人片一区二区三区| 中文字幕电影一区| 久久欧美中文字幕| 2024国产精品| 欧美一区二区美女| 欧美伦理影视网| 欧美性受极品xxxx喷水| 色婷婷综合激情| 一本大道久久a久久精二百| 欧美一区二区人人喊爽| 欧美中文字幕一区| 在线观看亚洲a| 色94色欧美sute亚洲线路一久| 99久久99久久精品免费观看| 国产成人精品亚洲午夜麻豆| 黄色资源网久久资源365|