The pain of poll(2)?

If you’re working on a multi-platform project which does network communication you will end up thinking about replacing select(2) with poll(2) sooner or later. The problem with select are well known. poll(2) removes the limitations of select(2) and improves speed and features. The problem is that poll(2) isn’t available on all platforms. This means you need a poll(2)-emulation or create wrappers around other similar poll() functions.

In libssh we use a poll(2)-emulation based on select for platforms which don’t provide a poll(2) function like some Windows versions or UNIX systems.

Windows Vista or newer version provide a poll(2) like function called WSAPoll(). To be able to support this call which is faster the the poll(2)-emulation and allows to use more file descriptors we implemented a runtime detection for WSAPoll(). This means during initialization of the socket, we check if the functions can be found in the relevant library. If Windows doesn’t provide it, we fallback to the poll(2)-emulation.

I took several month to get this working correctly on UNIX and Windows. This feature starts to work correctly with libssh 0.4.6 released today.

kio_sftp updates

openSUSE has backported the new kio_sftp implementation based on libssh to their KDE 4.3 packages. This increased the users and helped to find some bugs in kio_sftp and KDE. The current implementation is working fairly well.

As soon as libssh 0.4 will be released (hopefully soon) I will add more features. Users asked for ~/.ssh/config support and I’ve added openssh’s statvfs extension to libssh. This means I can check if there is enough space on the server before I copy a file.

Hack Week: kio_sftp in action!

The openSUSE Hackweek is over and I have a working kio_sftp implementation using libssh. There is still work which needs to be done. I have to cleanup the code and test all the features (resume of files, recursive deletion). Today I’ve copied successfully the first files to my webserver!


I’ve uploaded the two files to my webspace, here. Remeber that it’s not finished yet! You need libssh’s v0-3 git branch to get it working. I’ve found serveral bugs during the week. I will release libssh 0.3.2 next week.

Thanks to Dirk Müller who answered all my question and helped me with the KDE stuff.

Benchmarks will follow soon too.

ssh-agent client support for libssh

As you might know I develop csync which is a file synchronizer. To support sftp I’m using libssh. libssh is designed to be used by programmers needing a working SSH implementation by the mean of a library. I think it is nearly feature complete. I’ve cleaned up the sftp interface last year. The only thing missing was ssh-agent support. This is implemented now in the subversion trunk and will be released as libssh 0.3. I hope we can do a release soon.

csync and pam_csync 0.42.0 beta1

I’ve released a new version of csync and pam_csync. csync is a bidirectional file synchronizer for Linux and allows to keep two copies of files and directories in sync. It uses uses widly adopted protocols like smb or sftp so that there is no need for a server component of csync. It is a user-level program which means there is no need to be a superuser. With pam_csync it is possible to create roaming home directories.

This version fixes several bugs to increase the stability of the file synchronizer. It provides a new plugin to synchronize two replicas with the sftp protocol. To get the csync sftp plugin working you need libssh 0.2 with the following two patches:

Map permission fields
Errno mapping

The libssh package in the network:synchronization:files project in the build service has these two patches. The csync version of the BS project provides a csync-plugin-sftp package.

Packages for Fedora 9, openSUSE and SUSE Linux Enterprise 10 can be downloaded here.

More information at