# Transport The HTTP and socket seams. What a client can do to them, and what a shutdown can do to us. ## Closing a TCP listener can strand Accept [#679] {#accept} Costs: during close, both `errc` and `done` are ready in `acceptLoop`'s select. Go picks uniformly. So roughly one close in two leaves a waiting `Accept` blocked forever on a TCP seam. Unix sockets are unaffected. Revisit when: a daemon is seen hanging on shutdown, or before any new TCP listener is added. Workaround: the process usually exits anyway, which hides it. ## PTT reads an unbounded body [#688] {#ptt} Costs: `handlePTT` does an unlimited `io.ReadAll`, and mavweb sets no header or idle timeouts. A client can force unbounded allocation or hold a connection open. mavgpud's half of this was fixed in V-673. Revisit when: mavweb is reachable from anything but the tunnel. Workaround: mavweb is not LAN-exposed today. `/ws` rides along with this entry. It never calls `SetReadLimit`, so the dependency default of 32,768 bytes applies, about a second of audio. Nothing reaches it: the browser posts PCM to `/api/ptt`, and only `handlers_test.go` opens `/ws`. It gets a caller and a real limit, or it gets deleted. ## mavweb errors cannot be traced [#689] {#errors} Costs: some handlers return the raw internal error, which discloses internals. Others return a generic one with no identifier, which cannot be joined to its log line. There is no request-id middleware to join them. Revisit when: a reported UI failure cannot be found in the log. Workaround: read the log by timestamp.