static Eina_Bool _ecore_con_local_win32_client_read_server_handler(void *data, Ecore_Win32_Handler *wh) { Ecore_Con_Server *svr; void *buf; DWORD n; Eina_Bool broken_pipe = EINA_FALSE; svr = (Ecore_Con_Server *)data; if (!ResetEvent(svr->event_read)) return ECORE_CALLBACK_RENEW; buf = malloc(svr->nbr_bytes); if (!buf) return ECORE_CALLBACK_RENEW; if (ReadFile(svr->pipe, buf, svr->nbr_bytes, &n, NULL)) { if (!svr->delete_me) ecore_con_event_server_data(svr, buf, svr->nbr_bytes, EINA_FALSE); svr->want_write = 1; } else { if (GetLastError() == ERROR_BROKEN_PIPE) broken_pipe = EINA_TRUE; } if (broken_pipe) { #if 0 char *msg; msg = evil_last_error_get(); if (msg) { ecore_con_event_server_error(svr, msg); free(msg); } #endif if (!svr->delete_me) ecore_con_event_server_del(svr); svr->dead = EINA_TRUE; return ECORE_CALLBACK_CANCEL; } if (svr->want_write) ecore_con_local_win32_server_flush(svr); ecore_main_win32_handler_del(wh); return ECORE_CALLBACK_DONE; }
static Eina_Bool _ecore_con_local_win32_client_read_server_handler(void *data, Ecore_Win32_Handler *wh) { Ecore_Con_Server *obj = data; Efl_Network_Server_Data *svr = efl_data_scope_get(obj, EFL_NETWORK_SERVER_CLASS); void *buf; DWORD n; Eina_Bool broken_pipe = EINA_FALSE; if (!ResetEvent(svr->event_read)) return ECORE_CALLBACK_RENEW; buf = malloc(svr->nbr_bytes); if (!buf) return ECORE_CALLBACK_RENEW; if (ReadFile(svr->pipe, buf, svr->nbr_bytes, &n, NULL)) { if (!svr->delete_me) ecore_con_event_server_data(obj, buf, svr->nbr_bytes, EINA_FALSE); svr->want_write = 1; } else { if (GetLastError() == ERROR_BROKEN_PIPE) broken_pipe = EINA_TRUE; } if (broken_pipe) { #if 0 ecore_con_event_server_error(svr, evil_last_error_get()); #endif _ecore_con_server_kill(obj); return ECORE_CALLBACK_CANCEL; } if (svr->want_write) ecore_con_local_win32_server_flush(obj); ecore_main_win32_handler_del(wh); return ECORE_CALLBACK_DONE; }