I find it strange that classic applications would care what kind of a socket is on the other end. If CFSocket correctly implements the Berkely socket APIs (which is claims to), then any socket in the world should work.
Are you perhaps using some protocol that sits on top of the socket?
In any case, you can always use the raw APIs. This involves things like socket(), connect(), listen(), etc. There's a ton of documentation online about how to do this. It's not particularly difficult, but takes a bit of getting used to.
If you want to use some Cocoa, you might check out the
smallsockets library. It handles a lot of the nasty work for you. (It's also a good reference for understanding sockets in general since the code is pretty clean and readable.)
I'd be interested in seeing more information about what exactly is going wrong with the CFSockets...