3 // (C) Copyright Seb Wills 2005
5 // Linux-specific subclass of SocketInputBase: provides network socket control of Dasher cursor
7 #ifndef __SocketInput_h__
8 #define __SocketInput_h__
10 #include "./SocketInputBase.h"
11 #include "./Observable.h"
16 #define GCC_VERSION (__GNUC__ * 10000 \
17 + __GNUC_MINOR__ * 100 \
18 + __GNUC_PATCHLEVEL__)
24 #if GCC_VERSION >= 40100
25 void *ThreadLauncherStub(void *_myClass
);
31 class CSocketInput
:public CSocketInputBase
{
33 // This non-member launcher stub function is required because pthreads can't launch a non-static member method.
34 friend void *ThreadLauncherStub(void *_myClass
) {
35 CSocketInput
*myClass
= (CSocketInput
*) _myClass
;
37 pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS
, NULL
); // kill this thread immediately if another thread cancels it
38 // don't know how this interacts with recv blocking
40 myClass
->ReadForever();
47 CSocketInput(CSettingsUser
*pCreator
, CMessageDisplay
*pMsgs
);
52 pthread_t readerThread
;
54 bool LaunchReaderThread();
56 void CancelReaderThread();
58 // TODO: should probably override ReportErrnoError() to popup a Gtk error message