| 1802 | }; |
| 1803 | |
| 1804 | void do_complete(iocp_result_t *result) { |
| 1805 | iocpdesc_t *iocpd = result->iocpd; // connect result gets deleted |
| 1806 | switch (result->type) { |
| 1807 | |
| 1808 | case IOCP_ACCEPT: |
| 1809 | /* accept is now processed inline to do in parallel, except on teardown */ |
| 1810 | assert(iocpd->closing); |
| 1811 | complete_accept((accept_result_t *) result, result->status); // free's result and retires new_sock |
| 1812 | break; |
| 1813 | case IOCP_CONNECT: |
| 1814 | complete_connect((connect_result_t *) result, result->status); |
| 1815 | break; |
| 1816 | case IOCP_WRITE: |
| 1817 | complete_write((write_result_t *) result, result->num_transferred, result->status); |
| 1818 | break; |
| 1819 | case IOCP_READ: |
| 1820 | complete_read((read_result_t *) result, result->num_transferred, result->status); |
| 1821 | break; |
| 1822 | default: |
| 1823 | assert(false); |
| 1824 | } |
| 1825 | |
| 1826 | iocpd->ops_in_progress--; // Set in each begin_xxx call |
| 1827 | } |
| 1828 | |
| 1829 | |
| 1830 | static inline pconnection_t *as_pconnection_t(psocket_t* ps) { |
no test coverage detected