[swift-server-dev] Sockets API

Helge Heß me at helgehess.eu
Thu Oct 27 06:23:37 CDT 2016

On 27 Oct 2016, at 00:12, Logan Wright via swift-server-dev <swift-server-dev at swift.org> wrote:
> Sticking w/ the direction of the doc and working upwards, TCP and general socket work seems to be a natural starting point to work with.
> - Logan

I think people first had to figure out what this is all about. Maybe a swift-server-discuss mailing list is still valuable.

# Starting Point: Sockets

First of all I wonder whether this really belongs into Foundation, not swift-server-dev? It sounds like a generic Foundation feature which is as useful on the client. Or is it going to be developed here and moved over when ready?

Anyways, so what do people expect from a low level sockets API. There are a lot of design choices. To name a few:

1) Should it be synchronous (potentially w/ a non-blocking mode) and
   essentially just wrapping the Posix (and later) API?

2) Should it be asynchronous?

  - does everyone agree that async I/O would be driven by
    libdispatch channels?
    - and that data would be handed back-n-forth using DispatchData?

  - if it is async, ‘Swifty’ API for error handling does not really
    exist, i.e. no throws/try etc
    - so what should error handling look like?

  - should it use escaping closures for callbacks or delegates

3) Do you really want just a Socket, or is what you really want
   a (byte) stream framework?

  - there are some specifics to sockets (timeouts, connects and
    such), but the core of reading/writing(/encrypting/hashing/..)
    byte blocks/vectors is a general concept
    - this also affects TLS support (which wraps the reading/writing)

  - in the context of a potential core HTTP module, would requests
    and responses be exposed as streams with the same API?
    - think about chunked and WebSocket/Upgrade here
    - or would the HTTP API be completely separate?

  - would you want to have piping? (say, stream a file to a socket
    and through a zip stream)
    - would it handle back pressure?
    - consider optimisations for FD based streams (to use sendfile()
      and such)

4) Does it need String support or just bytes?

  - in a way java.io.Reader/Writer vs java.io.xyzStream

I would be interested to hear some ideas on where people think this would be going :-)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <https://lists.swift.org/pipermail/swift-server-dev/attachments/20161027/f75131ae/attachment.sig>

More information about the swift-server-dev mailing list