Correct me if I am wrong, but implementing this scenario for UD will
look like this: /* accept handling not shown... */
rdma_bind_addr(id, ...);
rdma_listen(id)
while(1) {
        read_request();
        do_work();
        if(new_client) { /* check if we already connected to client */
                /* following is not going to work because local address
is already bound */
                rdma_resolve_addr(my_local_already_bound_addr,
client_addr);

There could very well be a bug with the state management in the rdma cm that disallows this. (Have you tried this and seen it fail?) rdma_resolve_addr() only binds if the id is not already bound. So, call sequence such as:

rdma_bind_addr(id..)
rdma_resolve_addr(id..)

should work fine.

Likewise,

rdma_resolve_addr(id..)
rdma_resolve_route(id..)
rdma_connect(id..)

*should* work, but may not if the connection state isn't being reset properly for UD.

Note that you don't have to use the same id that you send on to resolve the address. You can use a temporary ID that you allocate for the purpose of obtaining the remote address handle.

As an alternative to calling rdma_resolve_addr() from the server, you can use the receive completion from the client to create an address handle. See the udaddy.c sample program with the librdmacm - specifically create_reply_ah().

- Sean
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to