Bueno, esos threads A y B, están compartiendo el acceso al socket
entrante (llámalo SS) cuyo gestión está delegada en el thread A.
Supongo que cuando B tiene que contestar se obtendrá un contexto y
entre otras cosas tendrá el socket SS, que le indicará a quién y por
dónde tiene que contestar.
Resumiendo que estás tratando un mismo socket por dos threads
distintos.
El núcleo intenta favorecer el rendimiento así que minimiza el número
de secciones críticas y supone que ningún socket va a ser compartido.
Si como es tu caso, el socket necesita ser compartido por varios
thread debes avisar al núcleo de comunicaciones, y configurar ese
socket SS para que se proteja de acceso simultáneos.
Así que tendrás que invocar al método
comm::socket::Client::setWorkMode con el valor
comm::socket::Client::WorkMode::Shared antes de guardar el socket en
el contexto que usarás luego al recibir la respuesta.
Ojo, en versiones anteriores la documentación avisaba de que había que
completar las secciones críticas, en las últimas versiones de la
plataforma de comunicaciones no hay que hacer nada, sólo activar el
modo compartido y ya está. Así que asegurate de que no estás
activando ninguna SSCC que colisione con las del núcleo.
Un saludo.