The difference between incoming and outgoing disappears as soon as a connection is established (i.e. in either case you end up with a bi-directional connection). At the moment the stack only allows a single outgoing connection, but I will shortly add the ability to listen for an incoming connection OR make an outbound connection, but not both at the same time.
I agree it's not a whole lot of extra code to allow multiple connections, but it's more than zero and will be a bit more effort to debug (which is the main reason I didn't include it to start - I figured it would take me long enough to shake out all the bugs in getting the packet sequencing and acknowledgement right, I didn't want to confuse things with bugs where I'd e.g. end up mixing in data from the wrong connection). So I will add it if/when I find an app I want to write that actually needs it.
The only client app I can think of is (as you say) ftp, but I'm not that keen in writing an ftp app - now that I have tftp working with some custom extensions to support directory listings, the only thing ftp would give you over that is a) username/password authentication (in clear text hence not much better than nothing at all) and b) a headache if you tried to implement "ascii" mode properly.
I believe an IRC client would need 1 tcp connection for each server, and another for sending files directly to/from another user (DCC SEND or whatever it is) - I think the client side code needed to manage multiple channels let alone multiple servers will be too complex for me to deal with in ASM, so c & contiki are probably better tools for anyone attempting such a feat.
There might be some value in allowing multiple inbound connections for a multi-threaded server (e.g. a web server) but again there would be a lot of complexity on the app side, and there's no real need (or value) to process requests in parallell - you might as well serialize them (e.g. by not responding to SYN requests when 1 connection is already in flight - the browser will resend the SYN a bunch of times and connect once the previous 'in-flight' request is complete).
But the beautiful think about open source is if anyone really wants multiple connections, they are very welcome to add support themselves
