Beispiel #1
0
void Http::event_cb(bufferevent *bev, short events, void *ctx)
{
	if (events & BEV_EVENT_ERROR)
	{
		int err = EVUTIL_SOCKET_ERROR();

		if (err)
		{
			DEBUG_LOG("Socket error: %s\n", evutil_socket_error_to_string(err));
		}
	}

	if (events & (BEV_EVENT_EOF | BEV_EVENT_ERROR))
	{
		Http* http = (Http*) ctx;

		if(http->bev_cgi == bev)
		{
			evbuffer *output = bufferevent_get_output(http->bev);
			if(evbuffer_get_length(output) == 0)
			{
				DEBUG_LOG("release http");
				Http::release(&http);	
			}
			else
			{
				DEBUG_LOG("release unix");
				http->set_all_send(true);
				bufferevent_free(http->bev_cgi);
				http->bev_cgi = NULL;
			}	
		}
		else if(http->bev == bev)
		{
			DEBUG_LOG("release http");
			Http::release(&http);
		}
		else
		{
			DEBUG_LOG("error event_cb");	
		}
	}
}