• Show log

    Commit

  • Hash : b1b69ac7
    Author : Diego Giagio
    Date : 2014-01-17T23:20:42

    Implemented EV_CLOSED event for epoll backend (EPOLLRDHUP).
    
    - Added new EV_CLOSED event - detects premature connection close
      by clients without the necessity of reading all the pending
      data. Does not depend on EV_READ and/or EV_WRITE.
    
    - Added new EV_FEATURE_EARLY_CLOSED feature for epoll.
      Must be supported for listening to EV_CLOSED event.
    
    - Added new regression test: test-closed.c
    
    - All regression tests passed (test/regress and test/test.sh)
    
    - strace output of test-closed using EV_CLOSED:
        socketpair(PF_LOCAL, SOCK_STREAM, 0, [6, 7]) = 0
        sendto(6, "test string\0", 12, 0, NULL, 0) = 12
        shutdown(6, SHUT_WR)                    = 0
        epoll_ctl(3, EPOLL_CTL_ADD, 7, {EPOLLRDHUP, {u32=7, u64=7}}) = 0
        epoll_wait(3, {{EPOLLRDHUP, {u32=7, u64=7}}}, 32, 3000) = 1
        epoll_ctl(3, EPOLL_CTL_MOD, 7, {EPOLLRDHUP, {u32=7, u64=7}}) = 0
        fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...})
        mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYM...
        write(1, "closed_cb: detected connection close "..., 45) = 45