mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-12-02 01:17:52 +03:00
socket: Add a SSH_WRITE_PENDING socket status.
This commit is contained in:
@@ -211,6 +211,7 @@ enum ssh_publickey_state_e {
|
|||||||
#define SSH_CLOSED 0x01
|
#define SSH_CLOSED 0x01
|
||||||
#define SSH_READ_PENDING 0x02
|
#define SSH_READ_PENDING 0x02
|
||||||
#define SSH_CLOSED_ERROR 0x04
|
#define SSH_CLOSED_ERROR 0x04
|
||||||
|
#define SSH_WRITE_PENDING 0x08
|
||||||
|
|
||||||
enum ssh_server_known_e {
|
enum ssh_server_known_e {
|
||||||
SSH_SERVER_ERROR=-1,
|
SSH_SERVER_ERROR=-1,
|
||||||
|
|||||||
@@ -527,9 +527,10 @@ int ssh_handle_packets_termination(ssh_session session, int timeout,
|
|||||||
*
|
*
|
||||||
* @param session The ssh session to use.
|
* @param session The ssh session to use.
|
||||||
*
|
*
|
||||||
* @returns A bitmask including SSH_CLOSED, SSH_READ_PENDING or SSH_CLOSED_ERROR
|
* @returns A bitmask including SSH_CLOSED, SSH_READ_PENDING, SSH_WRITE_PENDING
|
||||||
* which respectively means the session is closed, has data to read on
|
* or SSH_CLOSED_ERROR which respectively means the session is closed,
|
||||||
* the connection socket and session was closed due to an error.
|
* has data to read on the connection socket and session was closed
|
||||||
|
* due to an error.
|
||||||
*/
|
*/
|
||||||
int ssh_get_status(ssh_session session) {
|
int ssh_get_status(ssh_session session) {
|
||||||
int socketstate;
|
int socketstate;
|
||||||
@@ -547,6 +548,9 @@ int ssh_get_status(ssh_session session) {
|
|||||||
if (socketstate & SSH_READ_PENDING) {
|
if (socketstate & SSH_READ_PENDING) {
|
||||||
r |= SSH_READ_PENDING;
|
r |= SSH_READ_PENDING;
|
||||||
}
|
}
|
||||||
|
if (socketstate & SSH_WRITE_PENDING) {
|
||||||
|
r |= SSH_WRITE_PENDING;
|
||||||
|
}
|
||||||
if (session->closed && (socketstate & SSH_CLOSED_ERROR)) {
|
if (session->closed && (socketstate & SSH_CLOSED_ERROR)) {
|
||||||
r |= SSH_CLOSED_ERROR;
|
r |= SSH_CLOSED_ERROR;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -694,6 +694,10 @@ int ssh_socket_get_status(ssh_socket s) {
|
|||||||
r |= SSH_READ_PENDING;
|
r |= SSH_READ_PENDING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s->write_wontblock) {
|
||||||
|
r |= SSH_WRITE_PENDING;
|
||||||
|
}
|
||||||
|
|
||||||
if (s->data_except) {
|
if (s->data_except) {
|
||||||
r |= SSH_CLOSED_ERROR;
|
r |= SSH_CLOSED_ERROR;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user