mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-09 09:54:25 +09:00
Add more error checks to ssh_socket_blocking_flush().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@470 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
@@ -670,35 +670,48 @@ int ssh_socket_nonblocking_flush(struct socket *s) {
|
|||||||
/** \internal
|
/** \internal
|
||||||
* \brief locking flush of the output packet buffer
|
* \brief locking flush of the output packet buffer
|
||||||
*/
|
*/
|
||||||
int ssh_socket_blocking_flush(struct socket *s){
|
int ssh_socket_blocking_flush(struct socket *s) {
|
||||||
SSH_SESSION *session=s->session;
|
SSH_SESSION *session = s->session;
|
||||||
enter_function();
|
|
||||||
if(!ssh_socket_is_open(s)) {
|
enter_function();
|
||||||
session->alive=0;
|
|
||||||
leave_function();
|
if (!ssh_socket_is_open(s)) {
|
||||||
return SSH_ERROR;
|
session->alive = 0;
|
||||||
}
|
|
||||||
if(s->data_except){
|
|
||||||
leave_function();
|
|
||||||
return SSH_ERROR;
|
|
||||||
}
|
|
||||||
if(buffer_get_rest_len(s->out_buffer)==0){
|
|
||||||
leave_function();
|
|
||||||
return SSH_OK;
|
|
||||||
}
|
|
||||||
if(ssh_socket_completewrite(s,buffer_get_rest(s->out_buffer),
|
|
||||||
buffer_get_rest_len(s->out_buffer))){
|
|
||||||
session->alive=0;
|
|
||||||
ssh_socket_close(s);
|
|
||||||
// FIXME use the proper errno
|
|
||||||
ssh_set_error(session,SSH_FATAL,"Writing packet : error on socket (or connection closed): %s",
|
|
||||||
strerror(errno));
|
|
||||||
leave_function();
|
|
||||||
return SSH_ERROR;
|
|
||||||
}
|
|
||||||
buffer_reinit(s->out_buffer);
|
|
||||||
leave_function();
|
leave_function();
|
||||||
return SSH_OK; // no data pending
|
return SSH_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s->data_except) {
|
||||||
|
leave_function();
|
||||||
|
return SSH_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer_get_rest_len(s->out_buffer) == 0) {
|
||||||
|
leave_function();
|
||||||
|
return SSH_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ssh_socket_completewrite(s, buffer_get_rest(s->out_buffer),
|
||||||
|
buffer_get_rest_len(s->out_buffer)) != SSH_OK) {
|
||||||
|
session->alive = 0;
|
||||||
|
ssh_socket_close(s);
|
||||||
|
/* FIXME use the proper errno */
|
||||||
|
ssh_set_error(session, SSH_FATAL,
|
||||||
|
"Writing packet: error on socket (or connection closed): %s",
|
||||||
|
strerror(errno));
|
||||||
|
|
||||||
|
leave_function();
|
||||||
|
return SSH_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer_reinit(s->out_buffer) < 0) {
|
||||||
|
leave_function();
|
||||||
|
return SSH_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
leave_function();
|
||||||
|
return SSH_OK; // no data pending
|
||||||
}
|
}
|
||||||
|
|
||||||
void ssh_socket_set_towrite(struct socket *s){
|
void ssh_socket_set_towrite(struct socket *s){
|
||||||
|
|||||||
Reference in New Issue
Block a user