]> rtime.felk.cvut.cz Git - frescor/forb.git/blobdiff - src/iop.c
Handle EINTR in epoll
[frescor/forb.git] / src / iop.c
index 90c6e9d533e1badb32745f62302cd913d78bc2c6..f6dca49e57319e83b43b12865963f697447ea549 100644 (file)
--- a/src/iop.c
+++ b/src/iop.c
@@ -149,6 +149,8 @@ forb_iop_process_message_header(forb_iop_message_header *mh, FORB_CDR_Codec *cod
                                case forb_iop_HELLO:
                                        break;
                                default:
+                                       ul_logerr("rcvd wrong message type: %d\n",
+                                                 mh->message_type);
                                        return false;
                        }
                        codec->data_endian = (mh->flags && forb_iop_LITTLE_ENDIAN) ?
@@ -157,6 +159,8 @@ forb_iop_process_message_header(forb_iop_message_header *mh, FORB_CDR_Codec *cod
                        return true;
                        break;                  
                default:
+                       ul_logerr("rcvd wrong protocol versio: %d.%d\n",
+                                 mh->proto_version.major, mh->proto_version.minor);
                        return false;
        }
 }
@@ -503,7 +507,8 @@ void *forb_iop_receiver_thread(void *arg)
        forb_port_t *port = arg;
        const forb_proto_t *proto = port->desc.proto;
        FORB_CDR_Codec *c = &port->codec;
-       size_t rcvd, len;
+       ssize_t rcvd;
+       size_t len;
        forb_iop_message_header mh;
        bool header_received = false;
 
@@ -519,7 +524,7 @@ void *forb_iop_receiver_thread(void *arg)
                                   &c->buffer[c->wptr],
                                   c->wptr_max - c->wptr);
                if (rcvd < 0) {
-                       ul_logmsg("recv returned error %d\n", rcvd);
+                       ul_logerr("recv returned error %d (%s), exiting\n", rcvd, strerror(errno));
                        return NULL;
                }
                c->wptr += rcvd;
@@ -535,6 +540,10 @@ void *forb_iop_receiver_thread(void *arg)
                                                ul_logerr("Header doesn't start at 8 byte bounday\n");
                                        }
                                        header_received = forb_iop_process_message_header(&mh, c);
+                                       if (!header_received) {
+                                               ul_logerr("Wrong header received\n");
+                                               /* TODO: We should probably reset the buffer here */
+                                       }
                                        len = FORB_CDR_data_size(c);
                                } else {
                                        break; /* Wait for more data to arrive*/