If (hsendsocket = socket (af_inet, sock_dgram, 0) = invalid_socket)
{
Sprintf (szpromotemsg, "socket failed with: % d \ n", wsagetlasterror ());
Afxmessagebox (szpromotemsg );
Return;
}
// Bind the socket to the local interface. This is done so
// That we can receive data.
Local. sin_family = af_inet;
Local. sin_port = htons (m_iport );
Local. sin_addr.s_addr = m_dwinterface;
If (BIND (hsendsocket, (struct sockaddr *) & local,
Sizeof (local) = socket_error)
{
Sprintf (szpromotemsg, "bind failed with: % d \ n", wsagetlasterror ());
Afxmessagebox (szpromotemsg );
Return;
}
// Setup the im_req structure to indicate what group we want
// To join as well as the interface
//
Remote. sin_family = af_inet;
Remote. sin_port = htons (m_iport );
Remote. sin_addr.s_addr = (m_dwtargetipaddress );
MCAST. imr_multiaddr.s_addr = (m_dwtargetipaddress );
MCAST. imr_interface.s_addr = m_dwinterface; // ± & frac34; & micro; & Oslash; & ograve; & ocirc; & igrave; & laquo; & Iacute; & Oslash; Mac & micro; & Oslash; & ouml ;·
If (setsockopt (hsendsocket, ipproto_ip, ip_add_membership,
(Char *) & MCAST, sizeof (MCAST) = socket_error)
{
Sprintf (szpromotemsg, "setsockopt (ip_add_membership) failed: % d \ n ",
Wsagetlasterror ());
Afxmessagebox (szpromotemsg );
Return;
}
// Set the TTL to something else. The default TTL is 1.
Optval = 8;
If (setsockopt (hsendsocket, ipproto_ip, ip_multicast_ttl,
(Char *) & optval, sizeof (INT) = socket_error)
{
Sprintf (szpromotemsg, "setsockopt (ip_multicast_ttl) failed: % d \ n ",
Wsagetlasterror ());
Afxmessagebox (szpromotemsg );
Return;
}
// Disable the loopback if selected. Note that on NT4 and Win95
// You cannot disable it.
If (bloopback)
{
Optval = 0;
If (setsockopt (hsendsocket, ipproto_ip, ip_multicast_loop,
(Char *) & optval, sizeof (optval) = socket_error)
{
Sprintf (szpromotemsg, "setsockopt (ip_multicast_loop) failed: % d \ n ",
Wsagetlasterror ());
Afxmessagebox (szpromotemsg );
Return;
}
}
Ballowedsending = true;
/*
Broadcastparam * pbroadcastparam = new broadcastparam;
Pbroadcastparam-> remote = remote;
Pbroadcastparam-> nrate = m_irate;
Pbroadcastparam-> hbroadcastsocket = hsendsocket;
Pbroadcastparam-> ballowedsending = ballowedsending;
Afxbeginthread (broadcastthreadproc,
(Lpvoid) pbroadcastparam,
Thread_priority_normal,
0,
0,
Null );
*/