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

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

?? eloop.c

?? hostapd無線AP工具
?? C
字號:
/* * Event loop * Copyright (c) 2002-2005, Jouni Malinen <jkmaline@cc.hut.fi> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Alternatively, this software may be distributed under the terms of BSD * license. * * See README and COPYING for more details. */#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <errno.h>#include <signal.h>#ifdef CONFIG_NATIVE_WINDOWS#include "common.h"#endif /* CONFIG_NATIVE_WINDOWS */#include "eloop.h"struct eloop_sock {	int sock;	void *eloop_data;	void *user_data;	void (*handler)(int sock, void *eloop_ctx, void *sock_ctx);};struct eloop_timeout {	struct timeval time;	void *eloop_data;	void *user_data;	void (*handler)(void *eloop_ctx, void *sock_ctx);	struct eloop_timeout *next;};struct eloop_signal {	int sig;	void *user_data;	void (*handler)(int sig, void *eloop_ctx, void *signal_ctx);	int signaled;};struct eloop_data {	void *user_data;	int max_sock, reader_count;	struct eloop_sock *readers;	struct eloop_timeout *timeout;	int signal_count;	struct eloop_signal *signals;	int signaled;	int pending_terminate;	int terminate;};static struct eloop_data eloop;void eloop_init(void *user_data){	memset(&eloop, 0, sizeof(eloop));	eloop.user_data = user_data;}int eloop_register_read_sock(int sock,			     void (*handler)(int sock, void *eloop_ctx,					     void *sock_ctx),			     void *eloop_data, void *user_data){	struct eloop_sock *tmp;	tmp = (struct eloop_sock *)		realloc(eloop.readers,			(eloop.reader_count + 1) * sizeof(struct eloop_sock));	if (tmp == NULL)		return -1;	tmp[eloop.reader_count].sock = sock;	tmp[eloop.reader_count].eloop_data = eloop_data;	tmp[eloop.reader_count].user_data = user_data;	tmp[eloop.reader_count].handler = handler;	eloop.reader_count++;	eloop.readers = tmp;	if (sock > eloop.max_sock)		eloop.max_sock = sock;	return 0;}void eloop_unregister_read_sock(int sock){	int i;	if (eloop.readers == NULL || eloop.reader_count == 0)		return;	for (i = 0; i < eloop.reader_count; i++) {		if (eloop.readers[i].sock == sock)			break;	}	if (i == eloop.reader_count)		return;	if (i != eloop.reader_count - 1) {		memmove(&eloop.readers[i], &eloop.readers[i + 1],			(eloop.reader_count - i - 1) *			sizeof(struct eloop_sock));	}	eloop.reader_count--;}int eloop_register_timeout(unsigned int secs, unsigned int usecs,			   void (*handler)(void *eloop_ctx, void *timeout_ctx),			   void *eloop_data, void *user_data){	struct eloop_timeout *timeout, *tmp, *prev;	timeout = (struct eloop_timeout *) malloc(sizeof(*timeout));	if (timeout == NULL)		return -1;	gettimeofday(&timeout->time, NULL);	timeout->time.tv_sec += secs;	timeout->time.tv_usec += usecs;	while (timeout->time.tv_usec >= 1000000) {		timeout->time.tv_sec++;		timeout->time.tv_usec -= 1000000;	}	timeout->eloop_data = eloop_data;	timeout->user_data = user_data;	timeout->handler = handler;	timeout->next = NULL;	if (eloop.timeout == NULL) {		eloop.timeout = timeout;		return 0;	}	prev = NULL;	tmp = eloop.timeout;	while (tmp != NULL) {		if (timercmp(&timeout->time, &tmp->time, <))			break;		prev = tmp;		tmp = tmp->next;	}	if (prev == NULL) {		timeout->next = eloop.timeout;		eloop.timeout = timeout;	} else {		timeout->next = prev->next;		prev->next = timeout;	}	return 0;}int eloop_cancel_timeout(void (*handler)(void *eloop_ctx, void *sock_ctx),			 void *eloop_data, void *user_data){	struct eloop_timeout *timeout, *prev, *next;	int removed = 0;	prev = NULL;	timeout = eloop.timeout;	while (timeout != NULL) {		next = timeout->next;		if (timeout->handler == handler &&		    (timeout->eloop_data == eloop_data ||		     eloop_data == ELOOP_ALL_CTX) &&		    (timeout->user_data == user_data ||		     user_data == ELOOP_ALL_CTX)) {			if (prev == NULL)				eloop.timeout = next;			else				prev->next = next;			free(timeout);			removed++;		} else			prev = timeout;		timeout = next;	}	return removed;}#ifndef CONFIG_NATIVE_WINDOWSstatic void eloop_handle_alarm(int sig){	fprintf(stderr, "eloop: could not process SIGINT or SIGTERM in two "		"seconds. Looks like there\n"		"is a bug that ends up in a busy loop that "		"prevents clean shutdown.\n"		"Killing program forcefully.\n");	exit(1);}#endif /* CONFIG_NATIVE_WINDOWS */static void eloop_handle_signal(int sig){	int i;#ifndef CONFIG_NATIVE_WINDOWS	if ((sig == SIGINT || sig == SIGTERM) && !eloop.pending_terminate) {		/* Use SIGALRM to break out from potential busy loops that		 * would not allow the program to be killed. */		eloop.pending_terminate = 1;		signal(SIGALRM, eloop_handle_alarm);		alarm(2);	}#endif /* CONFIG_NATIVE_WINDOWS */	eloop.signaled++;	for (i = 0; i < eloop.signal_count; i++) {		if (eloop.signals[i].sig == sig) {			eloop.signals[i].signaled++;			break;		}	}}static void eloop_process_pending_signals(void){	int i;	if (eloop.signaled == 0)		return;	eloop.signaled = 0;	if (eloop.pending_terminate) {#ifndef CONFIG_NATIVE_WINDOWS		alarm(0);#endif /* CONFIG_NATIVE_WINDOWS */		eloop.pending_terminate = 0;	}	for (i = 0; i < eloop.signal_count; i++) {		if (eloop.signals[i].signaled) {			eloop.signals[i].signaled = 0;			eloop.signals[i].handler(eloop.signals[i].sig,						 eloop.user_data,						 eloop.signals[i].user_data);		}	}}int eloop_register_signal(int sig,			  void (*handler)(int sig, void *eloop_ctx,					  void *signal_ctx),			  void *user_data){	struct eloop_signal *tmp;	tmp = (struct eloop_signal *)		realloc(eloop.signals,			(eloop.signal_count + 1) *			sizeof(struct eloop_signal));	if (tmp == NULL)		return -1;	tmp[eloop.signal_count].sig = sig;	tmp[eloop.signal_count].user_data = user_data;	tmp[eloop.signal_count].handler = handler;	tmp[eloop.signal_count].signaled = 0;	eloop.signal_count++;	eloop.signals = tmp;	signal(sig, eloop_handle_signal);	return 0;}void eloop_run(void){	fd_set rfds;	int i, res;	struct timeval tv, now;	while (!eloop.terminate &&		(eloop.timeout || eloop.reader_count > 0)) {		if (eloop.timeout) {			gettimeofday(&now, NULL);			if (timercmp(&now, &eloop.timeout->time, <))				timersub(&eloop.timeout->time, &now, &tv);			else				tv.tv_sec = tv.tv_usec = 0;#if 0			printf("next timeout in %lu.%06lu sec\n",			       tv.tv_sec, tv.tv_usec);#endif		}		FD_ZERO(&rfds);		for (i = 0; i < eloop.reader_count; i++)			FD_SET(eloop.readers[i].sock, &rfds);		res = select(eloop.max_sock + 1, &rfds, NULL, NULL,			     eloop.timeout ? &tv : NULL);		if (res < 0 && errno != EINTR) {			perror("select");			return;		}		eloop_process_pending_signals();		/* check if some registered timeouts have occurred */		if (eloop.timeout) {			struct eloop_timeout *tmp;			gettimeofday(&now, NULL);			if (!timercmp(&now, &eloop.timeout->time, <)) {				tmp = eloop.timeout;				eloop.timeout = eloop.timeout->next;				tmp->handler(tmp->eloop_data,					     tmp->user_data);				free(tmp);			}		}		if (res <= 0)			continue;		for (i = 0; i < eloop.reader_count; i++) {			if (FD_ISSET(eloop.readers[i].sock, &rfds)) {				eloop.readers[i].handler(					eloop.readers[i].sock,					eloop.readers[i].eloop_data,					eloop.readers[i].user_data);			}		}	}}void eloop_terminate(void){	eloop.terminate = 1;}void eloop_destroy(void){	struct eloop_timeout *timeout, *prev;	timeout = eloop.timeout;	while (timeout != NULL) {		prev = timeout;		timeout = timeout->next;		free(prev);	}	free(eloop.readers);	free(eloop.signals);}int eloop_terminated(void){	return eloop.terminate;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日产卡一卡二卡麻豆| 国产欧美日韩卡一| 男女视频一区二区| 欧美一区二区三区婷婷月色| 视频一区在线视频| 2023国产精品| 色域天天综合网| 青青草国产精品97视觉盛宴| 日韩免费在线观看| 色综合久久99| 久久国产精品无码网站| 国产亚洲人成网站| 欧美日韩一区二区三区不卡| 青青草国产成人av片免费| 久久久不卡影院| 欧美精品久久久久久久多人混战 | 国产一区二区精品久久99| 精品对白一区国产伦| 国产盗摄一区二区三区| 国产欧美日韩视频在线观看| 国产乱色国产精品免费视频| 99久久夜色精品国产网站| 国产精品久久久久婷婷| 精品国内片67194| 91搞黄在线观看| 91蜜桃网址入口| 99在线热播精品免费| 成人综合日日夜夜| 国产成人免费在线观看| 丰满亚洲少妇av| 国产成a人无v码亚洲福利| 国产精品1区二区.| 国产凹凸在线观看一区二区| 国产成人免费av在线| 久久99精品久久久久久动态图| 亚洲影视在线播放| 秋霞午夜av一区二区三区| 日韩专区中文字幕一区二区| 久久er99精品| 成人免费视频网站在线观看| 色综合天天狠狠| 日韩久久精品一区| 日本一区二区三区在线观看| 精品视频免费在线| 99精品国产热久久91蜜凸| 国产中文字幕精品| 日韩精品三区四区| 中文字幕精品三区| 欧美久久久久久蜜桃| 色偷偷88欧美精品久久久| 国产91在线观看丝袜| 成人动漫视频在线| 在线视频欧美区| 日韩免费观看高清完整版| 久久精品人人做人人爽97| 国产精品久久久久久久午夜片| 伊人色综合久久天天| 精品一区二区在线视频| 91在线免费看| 欧美性受极品xxxx喷水| www成人在线观看| 中文字幕一区二区三中文字幕| 性感美女久久精品| 99精品欧美一区二区蜜桃免费| 91精品国产一区二区三区香蕉| 久久久一区二区| 性欧美疯狂xxxxbbbb| 一本久久综合亚洲鲁鲁五月天 | 日韩av中文字幕一区二区| 91免费看`日韩一区二区| 久久综合九色综合久久久精品综合| 亚洲美女屁股眼交3| 蜜桃av一区二区在线观看 | 国产精品免费视频网站| 久久99热99| 欧美成va人片在线观看| 奇米精品一区二区三区在线观看| 欧美久久久久久久久久| 亚洲香肠在线观看| 精品婷婷伊人一区三区三| 亚洲成av人片在线| 欧美成人三级在线| 国产激情一区二区三区四区| 国产视频一区二区三区在线观看| 丁香婷婷深情五月亚洲| 亚洲丝袜另类动漫二区| 成人毛片老司机大片| 国产精品乱人伦一区二区| 国产91丝袜在线播放0| 日韩伦理电影网| 在线观看成人免费视频| 午夜精品久久久久久久99水蜜桃 | 国产麻豆精品95视频| 国产精品伦一区二区三级视频| 欧洲亚洲国产日韩| 日韩一区精品字幕| 久久精品夜色噜噜亚洲a∨| 国产一区二区网址| 亚洲在线中文字幕| 精品对白一区国产伦| 不卡欧美aaaaa| 麻豆精品国产传媒mv男同| 亚洲色图视频免费播放| 精品久久久三级丝袜| 欧美影院一区二区三区| 国产精品综合久久| 蜜桃av一区二区三区| 亚洲精品第1页| 日韩一区日韩二区| 精品福利在线导航| 精品免费日韩av| 久久综合久久鬼色| 欧美va亚洲va香蕉在线 | 91在线观看高清| 丁香婷婷综合色啪| 国内精品伊人久久久久影院对白| 亚洲欧美经典视频| 中文字幕高清一区| 国产亚洲女人久久久久毛片| 精品国产一区二区精华| 7777精品伊人久久久大香线蕉 | 一道本成人在线| 欧美丝袜丝交足nylons图片| 欧美三级电影精品| 91精品国产综合久久久久久漫画| 欧美视频中文字幕| 91精品国产综合久久精品app| 91久久一区二区| 在线综合视频播放| ww亚洲ww在线观看国产| 久久先锋影音av鲁色资源| 日韩欧美国产午夜精品| 26uuu国产电影一区二区| 亚洲国产精品v| 视频一区二区不卡| 韩国av一区二区三区在线观看| 九一九一国产精品| 91小视频在线| 欧美一区二区久久| 亚洲综合视频在线观看| 精品一区二区三区视频 | 国产精品电影院| 日本强好片久久久久久aaa| 99综合电影在线视频| 精品国产91乱码一区二区三区| 亚洲一区二区三区美女| 国产精选一区二区三区| 日韩一区二区三区三四区视频在线观看 | 丁香婷婷深情五月亚洲| 日韩欧美中文字幕制服| 香蕉久久一区二区不卡无毒影院| 国产成人啪午夜精品网站男同| 日韩亚洲欧美在线| 亚洲国产精品一区二区久久 | 国产一区二区三区蝌蚪| 欧美成人精品高清在线播放| 一区二区三区四区五区视频在线观看 | 亚洲图片你懂的| jlzzjlzz亚洲日本少妇| 国产精品免费人成网站| 成人在线视频首页| 久久无码av三级| 奇米在线7777在线精品| 欧美一二三区在线观看| 一区二区欧美国产| 日韩一级黄色片| 美女诱惑一区二区| 欧美一区二区三区视频在线观看| 一区二区三区不卡视频| 欧美日韩精品一区视频| 乱中年女人伦av一区二区| 精品国产1区2区3区| 国产精品亚洲第一| 亚洲色图视频免费播放| 5566中文字幕一区二区电影| 日韩精品欧美成人高清一区二区| 91精品国产欧美一区二区成人| 久久66热偷产精品| 曰韩精品一区二区| 欧美一区二区成人6969| 国产精品一二三区| 亚洲一区二区不卡免费| 日韩写真欧美这视频| 成人av在线播放网址| 亚洲3atv精品一区二区三区| 久久综合久久久久88| 欧美巨大另类极品videosbest | 国产精品免费久久| 欧美一区二区三区在| 99久久久免费精品国产一区二区| 国产精品高潮呻吟| 久久久91精品国产一区二区精品 | 亚洲精品第一国产综合野| 久久久久国产成人精品亚洲午夜| 91黄色免费版| 99九九99九九九视频精品| 国产乱子伦视频一区二区三区| 蜜臀a∨国产成人精品| 亚洲成人一区在线| 亚洲成年人网站在线观看|