Вы пробовали?
b.assign(a.Handle.ToInt32());
Также обратите внимание, что вам нужно будет использовать WSADuplicateSocket, так как вы можете получить, что b и a закроют сокет и укажут, чего вы не ожидаете.
Итак, вам нужно что-то вроде:
SOCKET native = WSADuplicateSocket(a.Handle.ToInt32(),...);
b.assign(native);
Полный ответ (проверено)
SOCKET native = a->Handle.ToInt32();
// Now native is a real socket
b.assign(boost::asio::ip::tcp::v4(), native);
Теперь неплохо продублировать сокет с помощью WSADuplicateSocket: