Develop and Download Open Source Software

Browse Subversion Repository

Contents of /SocketX/McastSocket.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11 - (show annotations) (download) (as text)
Wed Feb 10 18:21:00 2010 UTC (14 years, 2 months ago) by sho1get
File MIME type: text/x-c++src
File size: 2452 byte(s)


1 #pragma once
2
3 #include "stdafx.h"
4 #include "SocketX.h"
5
6 //////////////////////////////////////////////////////////////////////////
7
8 IMPLEMENT_DYNAMIC(CMcastSocket, CPeerSocket)
9
10 CMcastSocket::CMcastSocket() :
11 m_fMcast(FALSE)
12 {
13 ZeroMemory(&m_McastAddr, sizeof(m_McastAddr));
14 }
15
16 CMcastSocket::~CMcastSocket()
17 {
18 }
19
20 BOOL CMcastSocket::SetReceiveMulticast(DWORD dwMcastAddress)
21 {
22 SOCKADDR_IN siAddr;
23 IP_MREQ im;
24
25 CopyMemory(&siAddr, &m_LocalAddr, sizeof(siAddr));
26 ZeroMemory(&im, sizeof(im));
27 im.imr_interface.s_addr = siAddr.sin_addr.s_addr;
28 im.imr_multiaddr.s_addr = dwMcastAddress;
29
30 if (!doSetSockOpt(m_hSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (LPSTR)&im, sizeof(im)))
31 {
32 TRACE1("***** ERROR: Multicast Socket(%d) *****\n", GetLastError());
33 return FALSE;
34 }
35
36 return TRUE;
37 }
38
39 BOOL CMcastSocket::JoinMulticastGroup(DWORD dwMcastAddress, WORD wPort)
40 {
41 NETADDR NetAddr;
42
43 ConvertSockAddrToNetAddr(&m_LocalAddr, NetAddr);
44
45 if (!doSetSockOpt(m_hSocket, IPPROTO_IP, IP_MULTICAST_IF, (LPSTR)&NetAddr.dwAddress, sizeof(NetAddr.dwAddress)))
46 {
47 TRACE1("***** ERROR: Multicast JoinGroup(%d) *****\n", GetLastError());
48 return FALSE;
49 }
50
51 ZeroMemory(&m_McastAddr, sizeof(m_McastAddr));
52 MakeSockAddrIN((LPSOCKADDR_IN)&m_McastAddr, dwMcastAddress, wPort);
53 m_fMcast = TRUE;
54
55 return TRUE;
56 }
57
58 BOOL CMcastSocket::LeaveMulticastGroup()
59 {
60 NETADDR NetAddr;
61
62 ConvertSockAddrToNetAddr(&m_LocalAddr, NetAddr);
63
64 if (!doSetSockOpt(m_hSocket, IPPROTO_IP, IP_DROP_MEMBERSHIP, (LPSTR)&NetAddr.dwAddress, sizeof(NetAddr.dwAddress)))
65 {
66 TRACE1("***** ERROR: Multicast LeaveGroup(%d) *****\n", GetLastError());
67 return FALSE;
68 }
69
70 ZeroMemory(&m_McastAddr, sizeof(m_McastAddr));
71 m_fMcast = FALSE;
72
73 return TRUE;
74 }
75
76 BOOL CMcastSocket::SetTTL(DWORD dwTTL)
77 {
78 if (!doSetSockOpt(m_hSocket, IPPROTO_IP, IP_MULTICAST_TTL, (LPSTR)&dwTTL, sizeof(dwTTL)))
79 {
80 TRACE1("***** ERROR: Multicast TTL(%d) *****\n", GetLastError());
81 return FALSE;
82 }
83
84 return TRUE;
85 }
86
87 BOOL CMcastSocket::Multicast(const CByteArray &data)
88 {
89 if (!m_fMcast)
90 {
91 TRACE("***** ERROR: Multicast(Socket isn't Multicast socket) *****\n");
92 return FALSE;
93 }
94
95 if (!SendTo(data, &m_McastAddr, sizeof(m_McastAddr)))
96 {
97 TRACE1("***** ERROR: Multicast(%d) *****\n", GetLastError());
98 return FALSE;
99 }
100
101 return TRUE;
102 }
103
104 //////////////////////////////////////////////////////////////////////////

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26