Add getLastErrno and use it where appropriate #41
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I've added a new error type, SessionError, which includes additional information that's available when the libssh2_session_* functions fail. It was very helpful diagnosing failures in my use of direct_tcpip, which without this only reported
CHANNEL_FAILURE
, and there was a lot more info in the string. Additionally I think this might provide a very minor performance gain, as EAGAINs won't trigger allocation of storage for the string that is thrown away anyway.This change may have a slight API change to users, they might be expecting ErrorCode to be thrown and get SessionError instead for some calls. Perhaps there's a way to automatically convert SessionError => ErrorCode for those cases if you care. I'm not familiar with Haskell enough but would add it if possible.
I've also got an assert to ensure that the followup call to getLastError returns the same error as getLastErrno incase there's something racy going on, I don't know if that's best practice in Haskell.