summaryrefslogtreecommitdiff
path: root/x11/ipc/client/ocopclient.cpp
authorzecke <zecke>2002-10-16 15:34:05 (UTC)
committer zecke <zecke>2002-10-16 15:34:05 (UTC)
commit321cea04e34658fde3de47c104682b5cefce6eeb (patch) (unidiff)
treeabdf45ae54d24dedfd20e4e40371df5f39687139 /x11/ipc/client/ocopclient.cpp
parent61f2f6ef32685002710f197dc8990fd9e99d83a5 (diff)
downloadopie-321cea04e34658fde3de47c104682b5cefce6eeb.zip
opie-321cea04e34658fde3de47c104682b5cefce6eeb.tar.gz
opie-321cea04e34658fde3de47c104682b5cefce6eeb.tar.bz2
more implementation!!
OCOPClient now tries to start the server
Diffstat (limited to 'x11/ipc/client/ocopclient.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--x11/ipc/client/ocopclient.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/x11/ipc/client/ocopclient.cpp b/x11/ipc/client/ocopclient.cpp
index 43e426c..ac6e4a3 100644
--- a/x11/ipc/client/ocopclient.cpp
+++ b/x11/ipc/client/ocopclient.cpp
@@ -3,6 +3,7 @@
3#include <stdio.h> 3#include <stdio.h>
4#include <unistd.h> 4#include <unistd.h>
5#include <sys/socket.h> 5#include <sys/socket.h>
6#include <sys/types.h>
6#include <sys/un.h> 7#include <sys/un.h>
7 8
8 9
@@ -16,16 +17,26 @@
16OCOPClient::OCOPClient( const QString& path, QObject* obj ) 17OCOPClient::OCOPClient( const QString& path, QObject* obj )
17 : QObject( obj ) 18 : QObject( obj )
18{ 19{
20 m_tries = 0;
19 init(QFile::encodeName(path) ); 21 init(QFile::encodeName(path) );
20} 22}
21OCOPClient::~OCOPClient() { 23OCOPClient::~OCOPClient() {
24 delete m_notify;
22 close( m_socket ); 25 close( m_socket );
23} 26}
27void OCOPClient::init() {
28 // failed start ther server NOW!!!
29 startUP();
30 QCString str;
31 init(str );
32}
24void OCOPClient::init( const QCString& ) { 33void OCOPClient::init( const QCString& ) {
34 m_tries++;
25 struct sockaddr_un unix_adr; 35 struct sockaddr_un unix_adr;
26 if ( (m_socket = socket(PF_UNIX, SOCK_STREAM, 0) ) < 0 ) { 36 if ( (m_socket = socket(PF_UNIX, SOCK_STREAM, 0) ) < 0 ) {
27 qWarning("could not socket"); 37 qWarning("could not socket");
28 QTimer::singleShot(400, this,SLOT(init() ) ); 38 if ( m_tries < 8 )
39 QTimer::singleShot(400, this,SLOT(init() ) );
29 return; 40 return;
30 } 41 }
31 memset(&unix_adr, 0, sizeof(unix_adr ) ); 42 memset(&unix_adr, 0, sizeof(unix_adr ) );
@@ -36,7 +47,8 @@ void OCOPClient::init( const QCString& ) {
36 if ( ::connect(m_socket, (struct sockaddr*)&unix_adr, length ) < 0 ) { 47 if ( ::connect(m_socket, (struct sockaddr*)&unix_adr, length ) < 0 ) {
37 qWarning("could not connect %d", errno ); 48 qWarning("could not connect %d", errno );
38 close( m_socket ); 49 close( m_socket );
39 QTimer::singleShot(400, this, SLOT(init() ) ); 50 if ( m_tries < 8 )
51 QTimer::singleShot(400, this, SLOT(init() ) );
40 return; 52 return;
41 } 53 }
42 m_notify = new QSocketNotifier(m_socket, QSocketNotifier::Read, this ); 54 m_notify = new QSocketNotifier(m_socket, QSocketNotifier::Read, this );
@@ -127,3 +139,12 @@ void OCOPClient::call( const OCOPPacket& pack ) {
127 write(m_socket, pack.header().data(), pack.header().size() ); 139 write(m_socket, pack.header().data(), pack.header().size() );
128 write(m_socket, pack.content().data(), pack.content().size() ); 140 write(m_socket, pack.content().data(), pack.content().size() );
129} 141}
142void OCOPClient::startUP() {
143 qWarning("Start me up");
144 pid_t pi = fork();
145 if ( pi == 0 ) {
146 setsid();
147 execlp("opie-ipc", "opie-ipc", NULL );
148 _exit(1);
149 }
150}