diff --git a/src/lib/ecore/ecore_glib.c b/src/lib/ecore/ecore_glib.c index bcc4b30ff9..5598ab0254 100644 --- a/src/lib/ecore/ecore_glib.c +++ b/src/lib/ecore/ecore_glib.c @@ -4,6 +4,9 @@ #include #include +#include +#include +#include #include "Ecore.h" #include "ecore_private.h" @@ -111,6 +114,7 @@ _ecore_glib_context_poll_to(GPollFD *pfds, int ready) { GPollFD *itr = pfds, *itr_end = pfds + count; + struct stat st; for (; (itr < itr_end) && (ready > 0); itr++) { @@ -124,6 +128,19 @@ _ecore_glib_context_poll_to(GPollFD *pfds, { itr->revents |= G_IO_OUT; ready--; + if (!fstat(itr->fd, &st)) + { + if (S_ISSOCK(st.st_mode)) + { + struct sockaddr_in peer; + socklen_t length = sizeof(peer); + + memset(&peer, 0, sizeof(peer)); + if (getpeername(itr->fd, (struct sockaddr *)&peer, + &length)) + itr->revents |= G_IO_ERR; + } + } } if (FD_ISSET(itr->fd, efds) && (itr->events & (G_IO_HUP | G_IO_ERR))) {