Changeset 46

Show
Ignore:
Timestamp:
05/04/08 16:53:35 (4 months ago)
Author:
sip
Message:

Added multicast support

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • media/src/rtpsession.cpp

    r2 r46  
    11#include <sys/socket.h> 
     2#include <sys/types.h> 
    23#include <netinet/in.h> 
    34#include <arpa/inet.h> 
     
    8283int RTPSession::Init() 
    8384{ 
     85        Log(">Init RTPSession\n"); 
     86 
    8487        struct sockaddr_in sendAddr; 
    8588        socklen_t len; 
     89        int optval = 1; 
    8690 
    8791        /* empty addres */ 
     
    9094        sendAddr.sin_family = AF_INET; 
    9195 
    92         /* Create sockets */ 
     96        // Create sockets 
    9397        simSocket = socket(PF_INET,SOCK_DGRAM,0); 
     98        // set SO_REUSEADDR on a socket to true (1): 
     99        setsockopt(simSocket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); 
     100        //Bind 
    94101        bind(simSocket,(struct sockaddr *)&sendAddr,sizeof(struct sockaddr_in)); 
     102 
     103        // Open next socket 
    95104        simRtcpSocket = socket(PF_INET,SOCK_DGRAM,0); 
     105        // set SO_REUSEADDR on a socket to true (1): 
     106        setsockopt(simRtcpSocket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); 
     107        // Bind 
    96108        bind(simRtcpSocket,(struct sockaddr *)&sendAddr,sizeof(struct sockaddr_in)); 
    97109 
     
    115127                /* Create new socket */ 
    116128                simRtcpSocket = socket(PF_INET,SOCK_DGRAM,0); 
     129                // set SO_REUSEADDR on a socket to true (1): 
     130                setsockopt(simRtcpSocket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); 
    117131                /* Get port */ 
    118132                sendAddr.sin_port = htons(0); 
     
    123137        } 
    124138 
     139        Log("<Init RTPSession\n"); 
     140 
    125141        //Opened 
    126142        return 1; 
     
    220236int RTPSession::GetVideoPacket(BYTE *data,DWORD *size,BYTE *last,BYTE *lost,BYTE *type) 
    221237{ 
     238        sockaddr_in from_addr; 
     239        DWORD from_len = sizeof(from_addr); 
     240 
    222241        //Esperamos 
    223242        if(!WaitForSocket(simSocket,1)) 
     
    225244                return 0; 
    226245 
     246        //Receive from everywhere 
     247        memset(&from_addr, 0, from_len); 
     248 
    227249        //Leemos del socket 
    228         int num = recv(simSocket,recBuffer,MTU,0); 
     250        int num = recvfrom(simSocket,recBuffer,MTU,0,(sockaddr*)&from_addr, &from_len); 
    229251 
    230252        //Comprobamos que nos haya devuelto algo 
     
    318340int RTPSession::GetAudioPacket(BYTE *data,DWORD *size,BYTE *lost,BYTE *type,DWORD *timestamp) 
    319341{ 
     342        sockaddr_in from_addr; 
     343        DWORD from_len = sizeof(from_addr); 
     344 
    320345        //Esperamos 
    321346        if(!WaitForSocket(simSocket,1)) 
     
    323348                return 0; 
    324349 
     350        //Receive from everywhere 
     351        memset(&from_addr, 0, from_len); 
     352 
    325353        //Leemos del socket 
    326         int num = recv(simSocket,recBuffer,MTU,0); 
     354        int num = recvfrom(simSocket,recBuffer,MTU,0,(sockaddr*)&from_addr, &from_len); 
    327355 
    328356        //Comprobamos que nos haya devuelto algo 
Copyright 2006 - Sergio García Murillo
Powered by Trac - Edgewall Software