I’m using NSURLSessionStreamTask to implement a WebSocket client. About half 
the time when I close the connection, my delegate callback gets an error 
ENOTCONN. As far as I can tell, this error is bogus: there seems to be a race 
condition where both the server and the client are closing the socket, and 
sometimes when CFNetwork closes the socket it’s already been marked as closed, 
hence the error.

The sequence of events looks like:
1. I send a WebSocket CLOSE message
2. Something logs the message "TIC TCP Conn Missing Error [2:0x610000033d40]: 
Generating 1:54”
3. I receive the confirming CLOSE message from the server
4. Something logs "TIC Read Status [2:0x610000033d40]: 1:57”
5. I call -closeWrite and -closeRead on the NSURLSessionStreamTask
6. My -URLSession:readClosedForStreamTask: and 
-URLSession:writeClosedForStreamTask: delegate methods are called
7. My -URLSession:task:didCompleteWithError: delegate method is called, with an 
error {NSPOSIXErrorDomain, 57, “Socket is not connected”}. (57 = ENOTCONN.)

The other half of the time it goes exactly the same way except that in the last 
step the error parameter is nil.

As I said, I believe this error is bogus, so I’m updating my delegate method to 
ignore this specific error if I’ve already closed the streams. But I’d like to 
make sure my analysis and workaround are correct.

—Jens

PS: Running on macOS 10.13.2, and building with Xcode 9.2.
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list      (Macnetworkprog@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/macnetworkprog/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to