author | Michael Krelin <hacker@klever.net> | 2009-03-08 20:09:21 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2009-03-08 20:09:21 (UTC) |
commit | aadaa8b5d7eda23e72dbded9d6437b40358353f3 (patch) (side-by-side diff) | |
tree | 0bff6fdde1e2b9be02b48aaf7d03f095604718e1 /src/eyefiworker.cc | |
download | iii-0.0.zip iii-0.0.tar.gz iii-0.0.tar.bz2 |
Inital commit to public repository0.0
-rw-r--r-- | src/eyefiworker.cc | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/eyefiworker.cc b/src/eyefiworker.cc new file mode 100644 index 0000000..d87c36e --- a/dev/null +++ b/src/eyefiworker.cc @@ -0,0 +1,26 @@ +#include <sys/wait.h> +#include <stdexcept> +#include "eyefiworker.h" + +eyefiworker::eyefiworker() + : eyefiService(SOAP_IO_STORE|SOAP_IO_KEEPALIVE) { + bind_flags = SO_REUSEADDR; max_keep_alive = 0; + } + +int eyefiworker::run(int port) { + if(!soap_valid_socket(bind(0,port,5))) + throw std::runtime_error("failed to bind()"); + while(true) { + while(waitpid(-1,0,WNOHANG)>0); + if(!soap_valid_socket(accept())) + throw std::runtime_error("failed to accept()"); + pid_t p = fork(); + if(p<0) throw std::runtime_error("failed to fork()"); + if(!p) { + (void)serve(); + soap_destroy(this); soap_end(this); soap_done(this); + _exit(0); + } + close(socket); socket = SOAP_INVALID_SOCKET; + } +} |