Vivek Rana
/*
* File: main.c
* Author: root
*
* Created on May 17, 2011, 1:51 PM
*/
<pre>*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <unistd.h>
#include "lzo/lzo1z.h"
#include "struct.h"
#определить MAX_LEN 1024;
int main(int argc, char **argv)
{
инт носок;
инт flag_on = 1;
структура sockaddr_in mc_addr ;
неподписанные символ recv_str[1024];
инт recv_len;
структура mc_req структуру ip_mreq ;
типа char* mc_addr_str;
беззнаковое короткое mc_port;
структура sockaddr_in from_addr;
беззнаковый инт from_len;
mc_addr_str = "233.1.1.11";
mc_port = 34330;
if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
{
perror("socket() failed");
выход(1);
}
если ((что setsockopt(Sock и, флаги, в самого себя &амп;flag_on, оператор sizeof(flag_on))) &ЛТ; 0)
{
perror("setsockopt() failed");
выход(1);
}
memset(&mc_addr,0,sizeof(mc_addr));
mc_addr.значение переменной sin_family = равен af_inet;
mc_addr.sin_addr.s_addr = htonl(INADDR_ANY);
mc_addr.sin_port = htons(mc_port);
если ((&ампер связать(носки,(структура структуры *); mc_addr,оператор sizeof(mc_addr))) &ЛТ; 0)
{
perror("bind() failed");
выход(1);
}
mc_req.imr_multiaddr.s_addr = inet_addr(mc_addr_str);
mc_req.imr_interface.s_addr = htonl(INADDR_ANY);
если((что setsockopt(носок,IPPROTO_IP,IP_ADD_MEMBERSHIP, в(Void*) &ампер;mc_req,оператор sizeof(mc_req))) &ЛТ; 0)
{
perror("setsockopt() failed");
выход(1);
}
для(;;)
{
memset(recv_str,0,sizeof(recv_str));
from_len = sizeof(from_addr);
memset(&from_addr,0,from_len);
если((recv_len = вызов recvfrom(носок, recv_str,1024,0,(структура структуры*)&амп;, &амп mc_addr;from_len))&ЛТ;0)
{
perror("recvfrom() failed");
выход(1);
}
короткий комплен=0;
короткий NOP=0;
memcpy(&compLen,recv_str+4,2);
compLen = ntohs(комплен);
if(compLen > 0)
{
memcpy(&NOP,recv_str+2,2);
NOP=ntohs(NOP);
int i=0;
для(i=0;i<nop;i++)>
{
unsigned char src[compLen];
memcpy(&src,recv_str+6,compLen);
короткое src_len = compLen;
беззнаковый инт dst_len = 1024;
unsigned char dst[1024];
инт rcode в;
unsigned int eCode=0;
rcode в = lzo1z_decompress((lzo_bytep) СРЦ,(lzo_uint)src_len,(lzo_bytep) ДСТ(lzo_uintp)&ампер;dst_len,0);
}
}
}
если((что setsockopt(носок, IPPROTO_IP, IP_DROP_MEMBERSHIP, в(Void*)&ампер;mc_req, оператор sizeof(mc_req))) &ЛТ; 0)
{
perror("setsocketopt() failed");
выход(1);
}
закрыть(носок);
возвращает 0;
}