From 90c438f846ad201b0ef9fa1afe3f8771142b96cb Mon Sep 17 00:00:00 2001 From: cedric Date: Mon, 7 Jun 2010 13:05:49 +0000 Subject: [PATCH] * ecore_con: improve error detection. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/ecore@49551 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/ecore_con/ecore_con.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/lib/ecore_con/ecore_con.c b/src/lib/ecore_con/ecore_con.c index 5a912e8..2df5522 100644 --- a/src/lib/ecore_con/ecore_con.c +++ b/src/lib/ecore_con/ecore_con.c @@ -978,6 +978,8 @@ _ecore_con_cb_tcp_connect(void *data, Ecore_Con_Info *net_info) static void _ecore_con_cb_udp_connect(void *data, Ecore_Con_Info *net_info) { + char test[INET6_ADDRSTRLEN]; + char *tmp; Ecore_Con_Server *svr; int curstate = 0; int broadcast = 1; @@ -1293,7 +1295,7 @@ _ecore_con_cl_udp_handler(void *data, Ecore_Fd_Handler *fd_handler) errno = 0; num = read(svr->fd, buf, 65536); - if (num > 0) + if (num >= 0) { if (!svr->delete_me) { @@ -1318,6 +1320,15 @@ _ecore_con_cl_udp_handler(void *data, Ecore_Fd_Handler *fd_handler) } } } + else + { + if ((errno == EIO) || (errno == EBADF) || + (errno == EPIPE) || (errno == EINVAL) || + (errno == ENOSPC) || (errno == ECONNREFUSED)) + { + kill_server(svr); + } + } } else if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_WRITE)) _ecore_con_server_flush(svr); @@ -1350,7 +1361,7 @@ _ecore_con_svr_udp_handler(void *data, Ecore_Fd_Handler *fd_handler) num = recvfrom(svr->fd, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr*) &client_addr, &client_addr_len); #endif - if (num > 0) + if (num >= 0) { if (!svr->delete_me) { @@ -1414,9 +1425,12 @@ _ecore_con_svr_udp_handler(void *data, Ecore_Fd_Handler *fd_handler) } } } - if ((errno == EIO) || (errno == EBADF) || + } + else + { + if ((errno == EIO) || (errno == EBADF) || (errno == EPIPE) || (errno == EINVAL) || - (errno == ENOSPC) || (num == 0)/* is num == 0 right? */) + (errno == ENOSPC) || (errno == ECONNREFUSED)) { if (!svr->delete_me) { @@ -1476,7 +1490,7 @@ _ecore_con_svr_cl_handler(void *data, Ecore_Fd_Handler *fd_handler) if (!(num = ecore_con_ssl_client_read(cl, buf, 65536))) lost_client = 0; - if (num < 1) + if (num < 0) { if (inbuf && !cl->delete_me) { @@ -1552,7 +1566,6 @@ _ecore_con_server_flush(Ecore_Con_Server *svr) count = write(svr->fd, svr->write_buf + svr->write_buf_offset, num); else count = ecore_con_ssl_server_write(svr, svr->write_buf + svr->write_buf_offset, num); - if (count < 0) { /* we lost our server! */ @@ -1583,10 +1596,10 @@ _ecore_con_client_flush(Ecore_Con_Client *cl) count = write(cl->fd, cl->buf + cl->buf_offset, num); else count = ecore_con_ssl_client_write(cl, cl->buf + cl->buf_offset, num); - if (count < 1) + if (count < 0) { if ((errno == EIO) || (errno == EBADF) || (errno == EPIPE) || - (errno == EINVAL) || (errno == ENOSPC)) + (errno == EINVAL) || (errno == ENOSPC) || (errno == ECONNREFUSED)) { if (!cl->delete_me) { -- 2.7.4