return ret;
}
-#include <stdio.h>
-
int shutdown(int socket, int how)
{
int fd;
- printf("shutdown how %s\n", how == SHUT_RDWR ? "RDWR" : how == SHUT_RD ? "RD" : "WR");
fflush(stdout);
return (fd_get(socket, &fd) == fd_rsocket) ?
rshutdown(fd, how) : real.shutdown(fd, how);
int ctrl, ret = 0;
rs = idm_at(&idm, socket);
+ printf("rshutdown %d - %p {\n", socket, rs);
if (how == SHUT_RD) {
rs_shutdown_state(rs, rs_connect_rd);
return 0;
RS_CTRL_SHUTDOWN : RS_CTRL_DISCONNECT;
}
if (!rs_can_send_ctrl(rs)) {
+ printf(" rshutdown - need ctrl msg %d - %p\n", socket, rs);
ret = rs_process_cq(rs, 0, rs_can_send_ctrl);
+ printf(" rshutdown - have ctrl msg %d - %p\n", socket, rs);
if (ret)
return ret;
}
ret = rs_post_write(rs, 0, NULL, 0,
rs_msg_set(RS_OP_CTRL, ctrl),
0, 0, 0);
+ if (ret)
+ printf("rs_post_write failed %d %s\n", ret, strerror(errno));
}
if (!rs_all_sends_done(rs) && !(rs->state & rs_error))
+ {
+ printf(" rshutdown - need sends %d - %p\n", socket, rs);
rs_process_cq(rs, 0, rs_all_sends_done);
+ printf(" rshutdown - have sends %d - %p\n", socket, rs);
+ }
if ((rs->fd_flags & O_NONBLOCK) && (rs->state & rs_connected))
rs_set_nonblocking(rs, 1);
+ printf("} rshutdown %d - %p\n", socket, rs);
return 0;
}
struct rsocket *rs;
rs = idm_at(&idm, socket);
+ printf("rclose %d - %p {\n", socket, rs);
if (rs->state & rs_connected)
rshutdown(socket, SHUT_RDWR);
+ printf("} rclose %d - %p\n", socket, rs);
rs_free(rs);
return 0;
}