bug report: select on unconnected sockets

From: Radu Greab (radu@netsoft.ro)
Date: Sat Mar 31 2001 - 10:44:20 EST

  • Next message: kuznet@ms2.inr.ac.ru: "Re: IP layer bug?"

    Sorry if this is already known: on a RH 7.0 system with kernel 2.4.2
    or 2.4.3, a select on an unconnected socket incorrectly says that the
    socket is ready for input and output. Of course, reading from the socket
    file descriptor returns -1 and errno is set to ENOTCONN as shown in
    the strace output:

    socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
    select(4, [3], [3], [3], {0, 0}) = 2 (in [3], out [3], left {0, 0})
    read(3, 0xbffff668, 1024) = -1 ENOTCONN (Transport endpoint is not connected)

    I attached a small example program to reproduce the bug.

    Thanks,
    Radu Greab

    PS: please CC me your eventual replies as I'm not subscribed to the
    list.


    #include <stdio.h>
    #include <sys/time.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <unistd.h>

    int main(int argc, char **argv) {
      fd_set rfds, wfds, efds;
      int s, rc;
      struct timeval timeout;
      char buf[1025];

      s = socket(PF_INET, SOCK_STREAM, 0);
      if (s == -1) {
        perror("couldn't create socket");
        return -1;
      }

      FD_ZERO(&rfds);
      FD_SET(s, &rfds);
      FD_ZERO(&wfds);
      FD_SET(s, &wfds);
      FD_ZERO(&efds);
      FD_SET(s, &efds);
      timeout.tv_sec = timeout.tv_usec = 0;
      rc = select(s + 1, &rfds, &wfds, &efds, &timeout);
      if (rc == -1) {
        perror("select");
        return -1;
      }
      printf("select result=%d\n", rc);
      if (FD_ISSET(s, &rfds)) {
        rc = read(s, buf, 1024);
        if (rc == -1) {
          perror("read");
          return -1;
        }
        printf("read result=%d\n", rc);
      }

      return 0;
    }

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/



    This archive was generated by hypermail 2b29 : Sat Mar 31 2001 - 10:49:13 EST