#ifndef _VIP_SOCKETTHREAD_HH_
#define _VIP_SOCKETTHREAD_HH_

#include <vos/vip/vipdefs.hh>

#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif

#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif

#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif

#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <deque>

#include <boost/thread/thread.hpp>
#include <boost/thread/condition.hpp>

#include <vos/vutil/structpack.hh>
#include <vos/vutil/refcount.hh>

#include <vos/vip/socketmultiplexer.hh>

namespace VIP
{
    struct SocketProcessorThread
    {
        VUtil::vRef<SocketMultiplexer> sm;
        SocketProcessorThread(SocketMultiplexer* s) : sm(s, true) { }
        SocketProcessorThread(const SocketProcessorThread& spt)
            { sm = spt.sm; }

        void operator()();
    };
}

#endif
