| /* |
| ** igmpproxy - IGMP proxy based multicast router |
| ** Copyright (C) 2005 Johnny Egeland <johnny@rlo.org> |
| ** |
| ** This program is free software; you can redistribute it and/or modify |
| ** it under the terms of the GNU General Public License as published by |
| ** the Free Software Foundation; either version 2 of the License, or |
| ** (at your option) any later version. |
| ** |
| ** This program is distributed in the hope that it will be useful, |
| ** but WITHOUT ANY WARRANTY; without even the implied warranty of |
| ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| ** GNU General Public License for more details. |
| ** |
| ** You should have received a copy of the GNU General Public License |
| ** along with this program; if not, write to the Free Software |
| ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| ** |
| **---------------------------------------------------------------------------- |
| ** |
| ** This software is derived work from the following software. The original |
| ** source code has been modified from it's original state by the author |
| ** of igmpproxy. |
| ** |
| ** smcroute 0.92 - Copyright (C) 2001 Carsten Schill <carsten@cschill.de> |
| ** - Licensed under the GNU General Public License, either version 2 or |
| ** any later version. |
| ** |
| ** mrouted 3.9-beta3 - Copyright (C) 2002 by The Board of Trustees of |
| ** Leland Stanford Junior University. |
| ** - Licensed under the 3-clause BSD license, see Stanford.txt file. |
| ** |
| */ |
| /** |
| * udpsock.c contains function for creating a UDP socket. |
| * |
| */ |
| |
| #include "igmpproxy.h" |
| |
| /** |
| * Creates and connects a simple UDP socket to the target |
| * 'PeerInAdr':'PeerPort' |
| * |
| * @param PeerInAdr - The address to connect to |
| * @param PeerPort - The port to connect to |
| * |
| */ |
| int openUdpSocket( uint32_t PeerInAdr, uint16_t PeerPort ) { |
| int Sock; |
| struct sockaddr_in SockAdr; |
| |
| if( (Sock = socket( AF_INET, SOCK_RAW, IPPROTO_IGMP )) < 0 ) |
| my_log( LOG_ERR, errno, "UDP socket open" ); |
| |
| memset( &SockAdr, 0, sizeof( SockAdr ) ); |
| SockAdr.sin_family = AF_INET; |
| SockAdr.sin_port = htons(PeerPort); |
| SockAdr.sin_addr.s_addr = htonl(PeerInAdr); |
| |
| if( bind( Sock, (struct sockaddr *)&SockAdr, sizeof( SockAdr ) ) ) |
| my_log( LOG_ERR, errno, "UDP socket bind" ); |
| |
| return Sock; |
| } |
| |