From aadaa8b5d7eda23e72dbded9d6437b40358353f3 Mon Sep 17 00:00:00 2001 From: Michael Krelin Date: Sun, 08 Mar 2009 20:09:21 +0000 Subject: Inital commit to public repository --- (limited to 'src/eyefiworker.cc') 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 +#include +#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; + } +} -- cgit v0.9.0.2