diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2008-03-04 00:44:02 +0000 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2008-03-04 00:44:02 +0000 |
commit | 077dd81fcc9453613de18c6d037ef61f3a8e161c (patch) | |
tree | 027bfb56ae17b1395100809a6ab791551ab8ca0e /libssh/channels.c | |
parent | 9b5f8935132433d64757ac60ce0ee4e8c59a8af8 (diff) | |
download | libssh-077dd81fcc9453613de18c6d037ef61f3a8e161c.tar.gz libssh-077dd81fcc9453613de18c6d037ef61f3a8e161c.tar.xz libssh-077dd81fcc9453613de18c6d037ef61f3a8e161c.zip |
added the socket class and created wrappers
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@137 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/channels.c')
-rw-r--r-- | libssh/channels.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/libssh/channels.c b/libssh/channels.c index b9f757df..65a2af3a 100644 --- a/libssh/channels.c +++ b/libssh/channels.c @@ -905,7 +905,7 @@ static int channel_protocol_select(CHANNEL **rchans, CHANNEL **wchans, CHANNEL * j=0; for(i=0;echans[i];++i){ chan=echans[i]; - if(chan->session->fd==-1 || !chan->open || chan->session->data_except){ + if(!ssh_socket_is_open(chan->session->socket) || !chan->open || chan->session->data_except){ eout[j]=chan; ++j; } @@ -940,7 +940,7 @@ int channel_select(CHANNEL **readchans, CHANNEL **writechans, CHANNEL **exceptch CHANNEL *dummy=NULL; CHANNEL **rchans, **wchans, **echans; int fdmax=-1; - int i,fd; + int i; int r; /* don't allow NULL pointers */ if(!readchans) @@ -980,12 +980,25 @@ int channel_select(CHANNEL **readchans, CHANNEL **writechans, CHANNEL **exceptch FD_ZERO(&wset); FD_ZERO(&eset); for(i=0;readchans[i];++i){ - fd=readchans[i]->session->fd; + if(!ssh_socket_fd_isset(readchans[i]->session->socket,&rset)) + ssh_socket_fd_set(readchans[i]->session->socket, &rset, &fdmax); + } + for(i=0;writechans[i];++i){ + if(!ssh_socket_fd_isset(writechans[i]->session->socket,&wset)) + ssh_socket_fd_set(writechans[i]->session->socket,&wset, &fdmax); + } + for(i=0;exceptchans[i];++i){ + if(!ssh_socket_fd_isset(exceptchans[i]->session->socket,&eset)) + ssh_socket_fd_set(exceptchans[i]->session->socket,&eset,&fdmax); + } + +/* fd=readchans[i]->session->fd; if(!FD_ISSET(fd,&rset)){ FD_SET(fd,&rset); if(fd>=fdmax) fdmax=fd+1; } + } for(i=0;writechans[i];++i){ fd=writechans[i]->session->fd; @@ -995,6 +1008,7 @@ int channel_select(CHANNEL **readchans, CHANNEL **writechans, CHANNEL **exceptch fdmax=fd+1; } } + for(i=0;exceptchans[i];++i){ fd=exceptchans[i]->session->fd; if(!FD_ISSET(fd,&eset)){ @@ -1003,6 +1017,7 @@ int channel_select(CHANNEL **readchans, CHANNEL **writechans, CHANNEL **exceptch fdmax=fd+1; } } +*/ /* here we go */ r=select(fdmax,&rset,&wset,&eset,timeout); /* leave if select was interrupted */ @@ -1013,15 +1028,15 @@ int channel_select(CHANNEL **readchans, CHANNEL **writechans, CHANNEL **exceptch return SSH_EINTR; } for(i=0;readchans[i];++i){ - if(FD_ISSET(readchans[i]->session->fd,&rset)) + if(ssh_socket_fd_isset(readchans[i]->session->socket,&rset)) readchans[i]->session->data_to_read=1; } for(i=0;writechans[i];++i){ - if(FD_ISSET(writechans[i]->session->fd,&wset)) + if(ssh_socket_fd_isset(writechans[i]->session->socket,&wset)) writechans[i]->session->data_to_write=1; } for(i=0;exceptchans[i];++i){ - if(FD_ISSET(exceptchans[i]->session->fd,&eset)) + if(ssh_socket_fd_isset(exceptchans[i]->session->socket,&eset)) exceptchans[i]->session->data_except=1; } } while(1); /* return to do loop */ |