* ecore_con: improve error detection.

SVN revision: 49551
This commit is contained in:
Cedric BAIL 2010-06-07 13:05:49 +00:00
parent 5a8135174a
commit d76f881898
1 changed files with 21 additions and 8 deletions

View File

@ -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)
{