Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /SocketX/McastSocket.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 16 - (hide annotations) (download) (as text)
Mon Jun 28 05:40:57 2010 UTC (13 years, 9 months ago) by sho1get
File MIME type: text/x-c++src
File size: 2446 byte(s)
Update_20100628
1 sho1get 11 #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 sho1get 16 SOCKADDR_IN sAddrIn;
23 sho1get 11 IP_MREQ im;
24    
25 sho1get 16 CopyMemory(&sAddrIn, &m_LocalAddr, sizeof(sAddrIn));
26 sho1get 11 ZeroMemory(&im, sizeof(im));
27 sho1get 16 im.imr_interface.s_addr = sAddrIn.sin_addr.s_addr;
28 sho1get 11 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 sho1get 16 BOOL CMcastSocket::AddMembership(DWORD dwMcastAddress, WORD wPort)
40 sho1get 11 {
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 sho1get 16 BOOL CMcastSocket::DropMembership()
59 sho1get 11 {
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