From e3599df3083ec6aa9b8656589a171e2c5d3d7e7a Mon Sep 17 00:00:00 2001 From: schmirl Date: Fri, 13 Feb 2009 10:39:40 +0000 Subject: Added IGMP Multicast server Modified Files: Tag: v0_4 CONTRIBUTORS HISTORY Makefile README i18n.c server/component.c server/component.h server/connection.c server/connection.h server/livefilter.c server/server.c server/setup.c server/setup.h server/streamer.c server/streamer.h streamdev/streamdevhosts.conf tools/socket.c tools/socket.h Added Files: Tag: v0_4 patches/vdr-cap_net_raw.diff server/componentIGMP.c server/componentIGMP.h server/connectionIGMP.c server/connectionIGMP.h --- tools/socket.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'tools/socket.c') diff --git a/tools/socket.c b/tools/socket.c index 7f4ce0a..3523c29 100644 --- a/tools/socket.c +++ b/tools/socket.c @@ -1,5 +1,6 @@ #include "tools/socket.h" +#include #include #include #include @@ -15,10 +16,11 @@ // actual DSCP value used #define STREAMDEV_DSCP DSCP_AF41 -cTBSocket::cTBSocket(int Type) { +cTBSocket::cTBSocket(int Type, int Protocol) { memset(&m_LocalAddr, 0, sizeof(m_LocalAddr)); memset(&m_RemoteAddr, 0, sizeof(m_RemoteAddr)); m_Type = Type; + m_Protocol = Protocol; } cTBSocket::~cTBSocket() { @@ -31,7 +33,7 @@ bool cTBSocket::Connect(const std::string &Host, unsigned int Port) { if (IsOpen()) Close(); - if ((socket = ::socket(PF_INET, m_Type, IPPROTO_IP)) == -1) + if ((socket = ::socket(PF_INET, m_Type, m_Protocol)) == -1) return false; m_LocalAddr.sin_family = AF_INET; @@ -52,10 +54,12 @@ bool cTBSocket::Connect(const std::string &Host, unsigned int Port) { return false; } - len = sizeof(struct sockaddr_in); - if (::getpeername(socket, (struct sockaddr*)&m_RemoteAddr, &len) == -1) { - ::close(socket); - return false; + if (m_Type == SOCK_STREAM) { + len = sizeof(struct sockaddr_in); + if (::getpeername(socket, (struct sockaddr*)&m_RemoteAddr, &len) == -1) { + ::close(socket); + return false; + } } len = sizeof(struct sockaddr_in); @@ -64,7 +68,11 @@ bool cTBSocket::Connect(const std::string &Host, unsigned int Port) { return false; } - return cTBSource::Open(socket); + if (!cTBSource::Open(socket)) { + ::close(socket); + return false; + } + return true; } bool cTBSocket::Listen(const std::string &Ip, unsigned int Port, int BackLog) { @@ -74,7 +82,7 @@ bool cTBSocket::Listen(const std::string &Ip, unsigned int Port, int BackLog) { if (IsOpen()) Close(); - if ((socket = ::socket(PF_INET, m_Type, IPPROTO_IP)) == -1) + if ((socket = ::socket(PF_INET, m_Type, m_Protocol)) == -1) return false; val = 1; -- cgit v1.2.3