< Previous by Date Date Index Next by Date >
  Thread Index Next in Thread >

[reSIProcate] Frustration with TCP transport


I have frustration with the TCP transport – specifically with the behavior when an existing socket is “stale” and a write on the socket fails. 

 

TcpBaseTransport::processAllWriteRequests will create a new socket if there is no active connection, but there’s no verification that the socket is truly functional.  Control passes into TcpBaseTransport::processSomeWrites (and below) where the write fails.  There’s no feedback that the write has failed, so I’m stuck waiting for the protocol timer to declare the failure before a retry is possible.  Meanwhile, another request enqueued gets processed just fine because TcpBaseTransport::processAllWriteRequests recognizes there is no connection available & opens a new one.

 

Does the community have any vision of what a more complete handling of transmission error cases should look like?  My sense is that either we should verify the socket is OK before sending (requires a write, probably) or provide better handling of the error condition, ideally opening a new socket for the connection immediately.

 

Thanks for any feedback you may have.

PK