00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013 #ifndef _MBROADCAST_SOCKET_DEVICE_H_
00014 #define _MBROADCAST_SOCKET_DEVICE_H_
00015
00016 #include <QString>
00017
00018 #include "msocketdevice.h"
00019 #include "mythlogging.h"
00020
00022
00024
00025 class MBroadcastSocketDevice : public MSocketDevice
00026 {
00027 public:
00028 MBroadcastSocketDevice(QString sAddress, quint16 nPort) :
00029 MSocketDevice(MSocketDevice::Datagram),
00030 m_address(sAddress), m_port(nPort)
00031 {
00032 m_address.setAddress( sAddress );
00033 m_port = nPort;
00034
00035 QByteArray addr = sAddress.toLatin1();
00036 setProtocol(IPv4);
00037 setSocket(createNewSocket(), MSocketDevice::Datagram);
00038
00039 int one = 1;
00040 if (setsockopt(socket(), SOL_SOCKET, SO_BROADCAST,
00041 &one, sizeof(one)) < 0)
00042 {
00043 LOG(VB_GENERAL, LOG_ERR, "setsockopt - SO_BROADCAST Error" + ENO);
00044 }
00045
00046 setAddressReusable(true);
00047
00048 bind(m_address, m_port);
00049 }
00050
00051 virtual ~MBroadcastSocketDevice()
00052 {
00053 int zero = 0;
00054 setsockopt(socket(), SOL_SOCKET, SO_BROADCAST, &zero, sizeof(zero));
00055 }
00056
00057 virtual QHostAddress address() const { return m_address; }
00058 virtual quint16 port() const { return m_port; }
00059
00060 private:
00061 QHostAddress m_address;
00062 quint16 m_port;
00063 struct ip_mreq m_imr;
00064 };
00065
00066 #endif // _MBROADCAST_SOCKET_DEVICE_H_