Example #1
0
static void *
_socket(void *p) {
	struct monitor * m = p;
	for (;;) {
		int r = skynet_socket_poll();
		if (r==0)
			break;
		if (r<0) {
			CHECK_ABORT
			continue;
		}
		wakeup(m,0);
	}
Example #2
0
static void *
_socket(void *p) {
	struct monitor * m = p;
	for (;;) {
		int r = skynet_socket_poll();
		if (r==0)
			break;
		if (r<0)
			continue;
		wakeup(m,0);
	}
	return NULL;
}
Example #3
0
static void *
thread_socket(void *p) {
	struct monitor * m = p;
	skynet_initthread(THREAD_SOCKET);
	for (;;) {
		int r = skynet_socket_poll();
		if (r==0)
			break;
		if (r<0) {
			CHECK_ABORT
			continue;
		}
		wakeup(m,0);
	}
Example #4
0
static void *
thread_socket(void *p) {
	struct monitor * m = p;
	skynet_initthread(THREAD_SOCKET);
	for (;;) {
		int r = skynet_socket_poll();
		if (r==0)
			break;
		if (r<0) {
			CHECK_ABORT
			continue;
		}
		wakeup(m,0);	// 网络 IO 消息在 skynet 的设计里是 2 等公民. 而且一个网络消息通常只需要一个 worker 去处理就够了
	}
Example #5
0
// IO线程
static void _socket(void *p)
{
	monitor *m = (monitor *)p;
	SNServer::Get()->ThreadInit(THREAD_SOCKET);
	for (;;) {
		CHECK_ABORT;
		int r = skynet_socket_poll();
		if (r == 0)
			break;
		if (r < 0) {
			continue;
		}
		wakeup(m, 0);
	}
}
static void *
thread_socket(void *p) {
	struct monitor * m = p;

  // set socket thread's specific data to THREAD_SOCKET
	skynet_initthread(THREAD_SOCKET);

  // continue to poll socket and signal worker thread to process
	for (;;) {
		int r = skynet_socket_poll();
		if (r==0)
			break;
		if (r<0) {
			CHECK_ABORT
			continue;
		}
		wakeup(m,0);
	}
Example #7
0
static void *thread_socket(void *p) 
{
	struct monitor *m = p;
	skynet_initthread(THREAD_SOCKET);
	for(;;) 
	{
		int r = skynet_socket_poll();
		if(r == 0)
			break;
		if(r < 0) 
		{
			CHECK_ABORT
			continue;
		}

		// 有socket消息返回
		wakeup(m, 0);	// 全部线程都睡眠的情况下才唤醒一个工作线程(即只要有工作线程处于工作状态,则不需要唤醒)
	}