JCA is correct for your use-case.
See http://www.ironjacamar.org/doc/userguide/1.1/en-US/html/ch01.html#overview for an overview of the architecture. In your case the Socket will be in the ManagedConnection. You can checkout our HelloWorld example at http://www.ironjacamar.org/doc/userguide/1.1/en-US/html/apb.html#sample_helloworld or in the IronJacamar distribution.
And yes, if you need a Thread you will use the WorkManager with your Work implementation.
If you are doing inbound then you will need a MessageEndpoint/MessageEndpointFactory that supports your listener. I would suggest supporting the JMS listener such that you can use the EJB3/MDB container as the MessageEndpoint/MessageEndpointFactory. You could do your own of course. There is an inflow example here: https://github.com/ironjacamar/ironjacamar/blob/master/core/src/test/java/org/jboss/jca/core/inflow/PureInflowTestCase.java
Likely you are looking for something more simple though.
I'm not saying that JCA is the only solution to the problem - you could likely hack something together with Netty - but from a pure EE perspective I would say JCA is the way forward.