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

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

?? gdkfbmanager.c

?? linux下電話本所依賴的一些圖形庫
?? C
字號:
#include <config.h>#include <glib.h>#include <glib/gprintf.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include <sys/time.h>#include <sys/types.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <fcntl.h>#include "gdkfbmanager.h"typedef struct {  int socket;  int pid; /* -1 if not initialized */} Client;GHashTable *clients = NULL;GHashTable *new_clients = NULL;Client *current_owner = NULL;int master_socket;int create_master_socket (void){  int fd;  struct sockaddr_un addr;  fd = socket (PF_UNIX, SOCK_STREAM, 0);  if (fd < 0)     {      g_fprintf (stderr, "Error creating socket: %s\n", strerror(errno));      return -1;    }  unlink ("/tmp/.fb.manager");  addr.sun_family = AF_UNIX;  strcpy (addr.sun_path, "/tmp/.fb.manager");  if (bind(fd, (struct sockaddr *)&addr, sizeof (addr)) < 0)    {      g_fprintf (stderr, "Unable to bind socket: %s\n", strerror (errno));      close (fd);      return -1;    }    if (listen (fd, 10) < 0)    {      g_fprintf (stderr, "Unable to listen on socket: %s\n", strerror (errno));      close (fd);      return -1;    }  master_socket = fd;  return 0;}voidhandle_new_client (void){  int fd;  Client *client;  int true_val;  fd = accept (master_socket, NULL, NULL);    client = g_new (Client, 1);  client->socket = fd;  client->pid = -1;  true_val = 1;  setsockopt (fd, SOL_SOCKET, SO_PASSCRED, 	      &true_val, sizeof (true_val));  g_print ("Handling new client %p conntecting, fd = %d\n", client, fd);  g_hash_table_insert (new_clients, client, client);}struct fd_data{  fd_set *read_fds;  fd_set *exception_fds;  int max_fd;};void send_message (Client *client, enum FBManagerMessageType type, int data){  struct FBManagerMessage msg;  msg.msg_type = type;  msg.data = data;  send (client->socket, &msg, sizeof (msg), 0);}gbooleanwait_for_ack (Client *client, int timeout_secs){  struct FBManagerMessage msg;  int res;  fd_set rfds;  struct timeval tv;  while (1)    {      FD_ZERO(&rfds);      FD_SET(client->socket, &rfds);            tv.tv_sec = timeout_secs;      tv.tv_usec = 0;            res = select (client->socket+1, &rfds, NULL, NULL, &tv);            if (res == 0)	return FALSE;            res = recv (client->socket, &msg, sizeof (msg), 0);      if (res != sizeof (msg))	return FALSE;            if (msg.msg_type == FB_MANAGER_ACK)	return TRUE;    }}voidfind_another_client (gpointer key,		     gpointer value,		     gpointer user_data){  Client **res;  Client *client;  res = user_data;    if (*res)    return;  client = value;  if (client != current_owner)    *res = client;}voidswitch_to_client (Client *client){  g_print ("Switch_to_client, client=%p, current_owner=%p\n", client, current_owner);  if ((current_owner == client) && (client != NULL))    return;  if (current_owner)    {      g_print ("switching from client fd=%d\n", current_owner->socket);      send_message (current_owner, FB_MANAGER_SWITCH_FROM, 0);      wait_for_ack (current_owner, 3);    }  current_owner = client;  if (current_owner)    {      g_print ("switching to client fd=%d\n", current_owner->socket);      send_message (current_owner, FB_MANAGER_SWITCH_TO, 0);    }}voidclose_client (Client *client){  Client *other_client;  g_print ("Closing client %p (fd=%d)\n", 	   client, client->socket);  if (current_owner == client)    {      other_client = NULL;      g_hash_table_foreach (clients,			    find_another_client,			    &other_client);      current_owner = NULL;      /* FIXME: This is a hack around the fact that the serial 	 mouse driver had problems with opening and closing	 the device almost at the same time.       */      sleep (1);      switch_to_client (other_client);    }     close (client->socket);  g_free (client);}/* Returns TRUE if the client was closed */gboolean read_client_data (Client *client){  struct FBManagerMessage fb_message;  struct msghdr msg;  struct iovec iov;  char control_buffer[256];  struct cmsghdr *cmsg;  int res;  struct ucred *creds;  Client *new_client;  iov.iov_base = &fb_message;  iov.iov_len = sizeof (fb_message);  cmsg = (struct cmsghdr *)control_buffer;  msg.msg_name = NULL;  msg.msg_namelen = 0;  msg.msg_iov = &iov;  msg.msg_iovlen = 1;  msg.msg_control = cmsg;  msg.msg_controllen = 256;  msg.msg_flags = 0;    g_print ("Reading client data:");  res = recvmsg (client->socket, &msg, 0);  g_print ("%d bytes, (error: %s)\n", res, 	   strerror (errno));    if (res < 0)    return FALSE;  if (res == 0)     {      close_client (client);      return TRUE;    }  if (res != sizeof (fb_message))    {      g_warning ("Packet with wrong size %d received", res);      return FALSE;    }  switch (fb_message.msg_type) {  case FB_MANAGER_NEW_CLIENT:    if (client->pid != -1)      {	g_warning ("Got a NEW_CLIENT message from an old client");	return FALSE;      }    creds = NULL;    for (cmsg = CMSG_FIRSTHDR(&msg);	 cmsg != NULL;	 cmsg = CMSG_NXTHDR(&msg,cmsg))      {	if (cmsg->cmsg_level == SOL_SOCKET && 	    cmsg->cmsg_type ==  SCM_CREDENTIALS) 	  {	    creds = (struct ucred *) CMSG_DATA(cmsg);	    break;	  }      }    if (creds == NULL)       {	g_warning ("Got no credentials in NEW_CLIENT message");	close_client (client);	return TRUE;      }    client->pid = creds->pid;    g_hash_table_insert (clients, GINT_TO_POINTER (client->pid), client);    g_print ("New client connected. Pid=%d\n", (int)creds->pid);    return TRUE;    break;  case FB_MANAGER_REQUEST_SWITCH_TO_PID:    if (client->pid == -1)      {	g_warning ("Got a message from an uninitialized client");	return FALSE;      }    new_client = g_hash_table_lookup (clients, GINT_TO_POINTER (fb_message.data));    if (new_client)      switch_to_client (new_client);    else      g_warning ("Switchto unknown PID");    break;  case FB_MANAGER_ACK:    if (client->pid == -1)      {	g_warning ("Got a message from an uninitialized client");	return FALSE;      }    g_warning ("Got an unexpected ACK");    break;  default:    g_warning ("Got unknown package type %d", fb_message.msg_type);    break;  }  return FALSE;}/* Returns TRUE if the client was closed */gbooleanhandle_client_data (gpointer key,		    gpointer value,		    gpointer user_data){  Client *client;  struct fd_data *data;  client = value;  data = user_data;  if (FD_ISSET (client->socket, data->exception_fds))    {      close_client (client);      return TRUE;    }  else if (FD_ISSET (client->socket, data->read_fds))    {      return read_client_data (client);    }    return FALSE;}voidset_fds (gpointer key,	 gpointer value,	 gpointer user_data){  struct fd_data *data;  Client *client;  client = value;  data = user_data;  FD_SET (client->socket, data->read_fds);  FD_SET (client->socket, data->exception_fds);  data->max_fd = MAX (data->max_fd, 		      client->socket);}voidmain_loop (void){  fd_set read_fds;  fd_set exception_fds;  struct fd_data data;  int res;    while (1)    {      FD_ZERO (&read_fds);      FD_ZERO (&exception_fds);      FD_SET (master_socket, &read_fds);      data.read_fds = &read_fds;      data.exception_fds = &exception_fds;      data.max_fd = master_socket;            g_hash_table_foreach (clients,			    set_fds,			    &data);      g_hash_table_foreach (new_clients,			    set_fds,			    &data);            res = select (data.max_fd+1, 		    &read_fds, NULL, &exception_fds, 		    NULL);      if (FD_ISSET (master_socket, &read_fds)) 	handle_new_client ();      g_hash_table_foreach_remove (clients,				   handle_client_data,				   &data);      g_hash_table_foreach_remove (new_clients,				   handle_client_data,				   &data);    }}intmain (int argc, char *argv[]){  clients = g_hash_table_new (g_direct_hash,			      g_direct_equal);  new_clients = g_hash_table_new (g_direct_hash,				  g_direct_equal);  create_master_socket ();  main_loop ();  return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
caoporn国产一区二区| 99国产一区二区三精品乱码| 丰满少妇久久久久久久| 欧美男生操女生| 国产精品理伦片| 精品一区二区在线视频| 欧美日韩一区二区电影| 国产精品黄色在线观看| 春色校园综合激情亚洲| 色欧美88888久久久久久影院| 欧美一区二区三区免费视频 | 国产日韩精品一区| 亚洲国产成人高清精品| voyeur盗摄精品| www久久精品| 日本91福利区| 欧美卡1卡2卡| 午夜精品免费在线| 欧美在线观看你懂的| 亚洲色大成网站www久久九九| 国产馆精品极品| 久久在线观看免费| 国内国产精品久久| 久久亚洲影视婷婷| 久久精品国产色蜜蜜麻豆| 7799精品视频| 免费在线一区观看| 亚洲成人激情社区| 精品一区二区三区av| 欧美色网一区二区| 亚洲男女一区二区三区| 国产999精品久久| 国产欧美一区二区精品性色超碰 | 久久免费偷拍视频| 国产一区二区三区视频在线播放| 精品欧美一区二区久久| 国产一区二区在线影院| 国产午夜精品久久久久久免费视| 国产麻豆成人精品| 国产精品美女视频| 99re这里只有精品6| 一区二区理论电影在线观看| 在线免费观看视频一区| 亚洲第一精品在线| 国产午夜精品一区二区三区嫩草| 日韩国产欧美三级| 日韩一区二区在线看| 久久国产精品72免费观看| 日韩欧美国产一区二区在线播放| 精品一区二区三区影院在线午夜 | 91国偷自产一区二区三区成为亚洲经典 | 亚洲综合在线观看视频| 欧美日韩日日骚| 国产一区二区三区香蕉| 中文字幕日韩一区二区| 欧美午夜精品一区二区蜜桃| 奇米精品一区二区三区在线观看一 | 国产精品伊人色| **欧美大码日韩| 欧美精品日日鲁夜夜添| 国产激情91久久精品导航| 亚洲免费观看高清在线观看| 日韩午夜在线播放| av亚洲精华国产精华精| 三级欧美韩日大片在线看| 久久无码av三级| 欧美性受极品xxxx喷水| 国产一区视频导航| 性感美女极品91精品| 国产亚洲精品久| 欧美高清视频一二三区| 成人午夜看片网址| 日本成人超碰在线观看| 综合分类小说区另类春色亚洲小说欧美 | 欧美色手机在线观看| 国产激情精品久久久第一区二区 | 日韩精品中午字幕| 色天使久久综合网天天| 国产中文字幕一区| 亚洲成在人线在线播放| 中文字幕精品一区| 日韩精品在线一区| 欧美性一级生活| 成人动漫av在线| 久久国内精品视频| 亚洲一区二区三区不卡国产欧美| 中文成人综合网| 久久综合狠狠综合久久综合88 | 成人免费在线播放视频| 久久综合av免费| 欧美日韩的一区二区| 美洲天堂一区二卡三卡四卡视频| 国产精品每日更新| 久久综合色8888| 欧美日韩国产影片| 欧美影视一区在线| 色婷婷av一区二区三区之一色屋| 国产成人精品免费| 国产精品自拍毛片| 精品一区二区三区香蕉蜜桃| 日韩专区欧美专区| 亚洲成av人片在线| 亚洲国产成人高清精品| 亚洲综合在线视频| 一区二区三区在线观看视频| 中文字幕一区二区5566日韩| 久久久99久久| 欧美激情一区二区三区蜜桃视频| 久久久精品免费观看| 久久亚洲精品国产精品紫薇| 26uuu国产在线精品一区二区| 欧美白人最猛性xxxxx69交| 日韩一二三区不卡| 日韩亚洲欧美中文三级| 日韩欧美亚洲一区二区| 欧美大片拔萝卜| 精品国产三级电影在线观看| 精品剧情在线观看| 精品久久久久久综合日本欧美| 欧美成人伊人久久综合网| 日韩免费观看高清完整版| 日韩精品中文字幕在线一区| 欧美精品一区二区三区很污很色的| 日韩视频永久免费| 久久九九全国免费| 国产精品福利一区二区| 亚洲欧美经典视频| 五月开心婷婷久久| 久久成人免费电影| 成人亚洲精品久久久久软件| 91麻豆国产福利精品| 欧美日韩国产小视频| 欧美一区二区三区在| 26uuu欧美| 1000精品久久久久久久久| 午夜视频久久久久久| 国产一区二区在线免费观看| caoporm超碰国产精品| 欧美日韩中文另类| wwwwww.欧美系列| 亚洲婷婷综合久久一本伊一区| 亚洲成人免费在线观看| 国产一区在线观看视频| 色94色欧美sute亚洲线路一久 | 久久久久久9999| 亚洲免费观看高清完整版在线观看 | 一区av在线播放| 蜜臀av性久久久久av蜜臀妖精| 国产高清久久久久| 日本韩国欧美一区| 精品国产区一区| 亚洲美女在线一区| 久久精品免费看| 色综合激情五月| 精品国产123| 亚洲精品中文在线观看| 久久国产人妖系列| 91色综合久久久久婷婷| 精品入口麻豆88视频| 一区二区三区四区精品在线视频| 久久99精品久久久| 欧美三级视频在线播放| 欧美激情中文不卡| 轻轻草成人在线| 91极品视觉盛宴| 国产精品天天摸av网| 蜜臀99久久精品久久久久久软件| 不卡区在线中文字幕| 精品美女在线播放| 天天做天天摸天天爽国产一区 | 日韩精品一区二区三区在线| 亚洲色图一区二区三区| 黑人精品欧美一区二区蜜桃| 欧美日韩中文精品| 亚洲乱码精品一二三四区日韩在线| 久久精品国产久精国产| 欧美做爰猛烈大尺度电影无法无天| 久久久精品日韩欧美| 久久精品噜噜噜成人88aⅴ| 欧美日韩一区二区欧美激情| 亚洲欧美乱综合| 成人福利视频网站| 国产日韩欧美高清| 激情六月婷婷综合| 日韩丝袜美女视频| 免费精品视频在线| 日韩午夜精品电影| 日本免费新一区视频| 欧美日韩在线三区| 亚洲第一久久影院| 欧美日韩在线播放三区四区| 亚洲综合无码一区二区| 91国模大尺度私拍在线视频| 亚洲色欲色欲www| 色偷偷成人一区二区三区91| 亚洲美女一区二区三区| 91啪亚洲精品| 一级日本不卡的影视| 欧美视频在线不卡| 五月婷婷激情综合|