]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
rsockets: Simplify state checks
authorSean Hefty <sean.hefty@intel.com>
Sat, 26 May 2012 00:28:44 +0000 (17:28 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 28 May 2012 00:01:28 +0000 (17:01 -0700)
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
src/rsocket.c

index e591116ee5729cede2bec924c4d365911d7369e9..8cbd425268a207d50ae70c13ac3266a74ac3cbb6 100644 (file)
@@ -121,6 +121,9 @@ struct rs_conn_data {
        struct rs_sge     data_buf;
 };
 
+/*
+ * rsocket states are ordered as passive, connecting, connected, disconnected.
+ */
 enum rs_state {
        rs_init,
        rs_bound,
@@ -129,9 +132,9 @@ enum rs_state {
        rs_resolving_route,
        rs_connecting,
        rs_accepting,
+       rs_connect_error,
        rs_connected,
        rs_disconnected,
-       rs_connect_error,
        rs_error
 };
 
@@ -994,9 +997,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags)
        int ret;
 
        rs = idm_at(&idm, socket);
-       if (rs->state != rs_connected &&
-           (rs->state == rs_resolving_addr || rs->state == rs_resolving_route ||
-            rs->state == rs_connecting || rs->state == rs_accepting)) {
+       if (rs->state < rs_connected) {
                ret = rs_do_connect(rs);
                if (ret) {
                        if (errno == EINPROGRESS)
@@ -1098,7 +1099,7 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags)
        int ret = 0;
 
        rs = idm_at(&idm, socket);
-       if (rs->state != rs_connected) {
+       if (rs->state < rs_connected) {
                ret = rs_do_connect(rs);
                if (ret) {
                        if (errno == EINPROGRESS)
@@ -1190,7 +1191,7 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags
        int i, ret = 0;
 
        rs = idm_at(&idm, socket);
-       if (rs->state != rs_connected) {
+       if (rs->state < rs_connected) {
                ret = rs_do_connect(rs);
                if (ret) {
                        if (errno == EINPROGRESS)
@@ -1319,7 +1320,7 @@ static int rs_poll_rs(struct rsocket *rs, int events,
                        revents |= POLLOUT;
                if (rs->state == rs_disconnected)
                        revents |= POLLHUP;
-               if (rs->state == rs_error)
+               else if (rs->state == rs_error)
                        revents |= POLLERR;
 
                return revents;
@@ -1360,16 +1361,11 @@ static int rs_poll_arm(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds)
                        if (fds[i].revents)
                                return 1;
 
-                       switch (rs->state) {
-                       case rs_connected:
-                       case rs_disconnected:
-                       case rs_error:
+                       if (rs->state >= rs_connected)
                                rfds[i].fd = rs->cm_id->recv_cq_channel->fd;
-                               break;
-                       default:
+                       else
                                rfds[i].fd = rs->cm_id->channel->fd;
-                               break;
-                       }
+
                        rfds[i].events = POLLIN;
                } else {
                        rfds[i].fd = fds[i].fd;