[ofa-general] rdma cm poll() POLLHUP?

Chevalier, David (GE Healthcare) David.Chevalier at ge.com
Wed Nov 7 07:00:45 PST 2007


Hi,
 I'm using rdma cm (OFED 1.2.5, kernel 2.6.22) to establish an rdma
connection:

rdma_event_channel *cm_channel = rdma_create_event_channel();
rdma_create_id(cm_channel, &cm_id, NULL, RDMA_PS_TCP);
... // various rdma_bind, listen, etc
ibv_comp_channel *ch = ibv_comp_channel(context); // follows ib_rdma_bw
example init sequence with ibv_ calls
... // now connection is established and known to work sending/receiving
data
... // and I've pre-posted some wr's to the receive queue on the server

... // next I want the server to wait for data from remote client:
struct pollfd fds[1];
fds[0].fd = ch->fd;
fds[0].events = POLLIN; // also have tried explicitly adding POLLHUP and
POLLERR but no change
fds[0].revents = 0;
ret = poll(fds,1,-1);

This returns with revents POLLIN as expected when the remote side sends
something,
but poll() does not seem to return POLLHUP (or anything) when 
the remote side gets killed. 

For a tcp socket, this would normally cause a POLLHUP event, but for
rdma cm there appears to be no indication,
we just wait in this case indefinitely for some input.

My question is, should it be possible to get a disconnected-type
notification
with rdma cm, and what do I need to do to detect it?

I've searched the general archive, but haven't found anything on this.

Thanks,
Dave



More information about the general mailing list