Fix the exception handling 54/91154/4
authorHwankyu Jhun <h.jhun@samsung.com>
Thu, 6 Oct 2016 05:54:32 +0000 (14:54 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Thu, 6 Oct 2016 06:04:42 +0000 (15:04 +0900)
The recv() returns 0 when the peer has performed an orderly
shutdown.

Change-Id: I46c095fb6605e1adab8197a17d5e24753ce7194a
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/aul_sock.c

index cdc1496..b60e1ba 100644 (file)
@@ -276,14 +276,13 @@ retry_con:
        ret = __connect_client_sock(fd, (struct sockaddr *)&saddr, sizeof(saddr),
                        100 * 1000);
        if (ret < -1) {
-               _E("maybe peer not launched or peer daed\n");
+               _E("maybe peer not launched or peer dead\n");
                if (retry > 0) {
                        usleep(100 * 1000);
                        retry--;
                        goto retry_con;
                }
-       }
-       if (ret < 0) {
+       } else if (ret < 0) {
                close(fd);
                return -1;
        }
@@ -311,7 +310,7 @@ static int __connect_client_sock(int fd, const struct sockaddr *saptr, socklen_t
        if ((ret = connect(fd, (struct sockaddr *)saptr, salen)) < 0) {
                if (errno != EAGAIN && errno != EINPROGRESS) {
                        fcntl(fd, F_SETFL, flags);
-                       return (-2);
+                       return -2;
                }
        }
 
@@ -329,24 +328,25 @@ static int __connect_client_sock(int fd, const struct sockaddr *saptr, socklen_t
                        nsec ? &timeout : NULL)) == 0) {
                close(fd);      /* timeout */
                errno = ETIMEDOUT;
-               return (-1);
+               return -1;
        }
 
        if (FD_ISSET(fd, &readfds) || FD_ISSET(fd, &writefds)) {
                len = sizeof(error);
                if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
-                       return (-1);    /* Solaris pending error */
-       } else
-               return (-1);    /* select error: sockfd not set*/
+                       return -1;      /* Solaris pending error */
+       }
+
+       return -1;      /* select error: sockfd not set*/
 
- done:
-       (void) fcntl(fd, F_SETFL, flags);
+done:
+       fcntl(fd, F_SETFL, flags);
        if (error) {
                close(fd);
                errno = error;
-               return (-1);
+               return -1;
        }
-       return (0);
+       return 0;
 }
 
 static int __send_raw_async_with_fd(int fd, int cmd, unsigned char *kb_data, int datalen, int opt)
@@ -402,7 +402,7 @@ API int aul_sock_send_raw_with_fd(int fd, int cmd, unsigned char *kb_data, int d
 
 retry_recv:
        len = recv(fd, &res, sizeof(int), 0);
-       if (len == -1) {
+       if (len <= 0) {
                if (errno == EAGAIN) {
                        _E("recv timeout : %s",
                                        strerror_r(errno, buf, sizeof(buf)));
@@ -514,7 +514,7 @@ API app_pkt_t *aul_sock_recv_pkt(int fd, int *clifd, struct ucred *cr)
  retry_recv:
        /* receive header(cmd, datalen) */
        len = recv(*clifd, buf, sizeof(buf), 0);
-       if (len < 0)
+       if (len <= 0)
                if (errno == EINTR)
                        goto retry_recv;
 
@@ -545,7 +545,7 @@ API app_pkt_t *aul_sock_recv_pkt(int fd, int *clifd, struct ucred *cr)
        len = 0;
        while (len != pkt->len) {
                ret = recv(*clifd, pkt->data + len, pkt->len - len, 0);
-               if (ret < 0) {
+               if (ret <= 0) {
                        _E("recv error %d %d", len, pkt->len);
                        free(pkt);
                        close(*clifd);
@@ -571,7 +571,7 @@ API int aul_sock_recv_reply_pkt(int fd, app_pkt_t **ret_pkt)
 retry_recv:
        /* receive header(cmd, datalen) */
        len = recv(fd, buf, sizeof(buf), 0);
-       if (len < 0)
+       if (len <= 0)
                if (errno == EINTR)
                        goto retry_recv;
 
@@ -610,7 +610,7 @@ retry_recv:
        len = 0;
        while (len != pkt->len) {
                ret = recv(fd, pkt->data + len, pkt->len - len, 0);
-               if (ret < 0) {
+               if (ret <= 0) {
                        if (errno == EINTR) {
                                continue;
                        } else {
@@ -805,14 +805,14 @@ static int __recv_raw_with_fd(int fd, unsigned int size,
        *datalen = 0;
        while (len > 0 && retry) {
                ret = recv(fd, data, len, 0);
-               if (ret < 0) {
+               if (ret <= 0) {
                        if (errno == EINTR || errno == EAGAIN) {
                                retry--;
                                continue;
                        }
 
                        _E("recv error - fd: %d, errno: %d", fd, errno);
-                       return ret;
+                       return -ECOMM;
                }
 
                len -= ret;
@@ -858,7 +858,7 @@ int aul_sock_recv_pkt_with_cb(int fd,
        if (ret < 0) {
                _E("recv error - %d", ret);
                close(fd);
-               return ret;
+               return -ECOMM;
        } else if (count <= 0 || recv_size != sizeof(int)) {
                _E("error - count: %d, recv_size: %d",
                                count, recv_size);