KConnectionSelectable::~KConnectionSelectable()
{
	if (socket) {
		if (selector) {
			/**
			* 这里为什么要调用一次removeSocket呢?
			* 一般来讲,在linux下面,一个socket close了。epoll自动会删除。
			* 但如果存在多进程的时候,此socket在一瞬间被其它进程共享,
			* 则close此socket,epoll还是会返回相关事件。
			*/
			selector->removeSocket(this);
		}
		delRequest(st_flags,socket);
		socket->shutdown(SHUT_RDWR);
		delete socket;
	}
	
	if (ls) {
		ls->release();
	}
#ifdef KSOCKET_SSL
	if (sni) {
		delete sni;
	}
#endif
}
Beispiel #2
0
static void dispatch_operation(struct session *session, DNDSMessage_t *msg)
{
	dsop_PR operation;
	DSMessage_get_operation(msg, &operation);

	switch (operation) {
	case dsop_PR_nodeConnectInfo:
		nodeConnectInfo(session, msg);
		break;

	case dsop_PR_addRequest:
		addRequest(msg);
		break;

	case dsop_PR_delRequest:
		delRequest(session, msg);
		break;

	case dsop_PR_modifyRequest:
		modifyRequest(session, msg);
		break;

	case dsop_PR_searchRequest:
		searchRequest(session, msg);
		break;

	/* terminateRequest is a special case since
	 * it has no Response message associated with it.
	 * simply disconnect the client;
	 */
	case dsop_PR_NOTHING:
	default:
		jlog(L_WARNING, "not a valid DSM operation");
	case dsop_PR_terminateRequest:
		terminate(session);
		break;
	}
}