diff options
author | zwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf> | 2006-01-24 13:11:45 +0000 |
---|---|---|
committer | zwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf> | 2006-01-24 13:11:45 +0000 |
commit | e1dadf2dbdd2bcf65517310498ded03c821e463e (patch) | |
tree | dec66c46bd95574cd935883c8339cc80a5518bfc /tools/socket.c | |
parent | 8f713939e81110b37fb289081216b3550c708c1f (diff) | |
download | vdr-plugin-ffnetdev-e1dadf2dbdd2bcf65517310498ded03c821e463e.tar.gz vdr-plugin-ffnetdev-e1dadf2dbdd2bcf65517310498ded03c821e463e.tar.bz2 |
Im Projektarchiv verschoben
git-svn-id: svn://svn.berlios.de/ffnetdev/trunk@4 1f4bef6d-8e0a-0410-8695-e467da8aaccf
Diffstat (limited to 'tools/socket.c')
-rw-r--r-- | tools/socket.c | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/tools/socket.c b/tools/socket.c deleted file mode 100644 index 3e3be65..0000000 --- a/tools/socket.c +++ /dev/null @@ -1,135 +0,0 @@ -#include "tools/socket.h" - -#include <string.h> -#include <arpa/inet.h> -#include <unistd.h> -#include <errno.h> -#include <fcntl.h> - -cTBSocket::cTBSocket(int Type) { - memset(&m_LocalAddr, 0, sizeof(m_LocalAddr)); - memset(&m_RemoteAddr, 0, sizeof(m_RemoteAddr)); - m_Type = Type; -} - -cTBSocket::~cTBSocket() { - if (IsOpen()) Close(); -} - -bool cTBSocket::Connect(const std::string &Host, unsigned int Port) { - socklen_t len; - int socket; - - if (IsOpen()) Close(); - - if ((socket = ::socket(PF_INET, m_Type, IPPROTO_IP)) == -1) - return false; - - m_LocalAddr.sin_family = AF_INET; - m_LocalAddr.sin_port = 0; - m_LocalAddr.sin_addr.s_addr = INADDR_ANY; - if (::bind(socket, (struct sockaddr*)&m_LocalAddr, sizeof(m_LocalAddr)) - == -1) - return false; - - m_RemoteAddr.sin_family = AF_INET; - m_RemoteAddr.sin_port = htons(Port); - m_RemoteAddr.sin_addr.s_addr = inet_addr(Host.c_str()); - if (::connect(socket, (struct sockaddr*)&m_RemoteAddr, - sizeof(m_RemoteAddr)) == -1) - return false; - - len = sizeof(struct sockaddr_in); - if (::getpeername(socket, (struct sockaddr*)&m_RemoteAddr, &len) == -1) - return false; - - len = sizeof(struct sockaddr_in); - if (::getsockname(socket, (struct sockaddr*)&m_LocalAddr, &len) == -1) - return false; - - return cTBSource::Open(socket); -} - -bool cTBSocket::Listen(const std::string &Ip, unsigned int Port, int BackLog) { - int val; - socklen_t len; - int socket; - - if (IsOpen()) Close(); - - if ((socket = ::socket(PF_INET, m_Type, IPPROTO_IP)) == -1) - return false; - - val = 1; - if (::setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) == -1) - return false; - - m_LocalAddr.sin_family = AF_INET; - m_LocalAddr.sin_port = htons(Port); - m_LocalAddr.sin_addr.s_addr = inet_addr(Ip.c_str()); - if (::bind(socket, (struct sockaddr*)&m_LocalAddr, sizeof(m_LocalAddr)) - == -1) - return false; - - len = sizeof(struct sockaddr_in); - if (::getsockname(socket, (struct sockaddr*)&m_LocalAddr, &len) == -1) - return false; - - if (m_Type == SOCK_STREAM && ::listen(socket, BackLog) == -1) - return false; - - if (!cTBSource::Open(socket)) - return false; - - return true; -} - -bool cTBSocket::Accept(const cTBSocket &Listener) { - socklen_t addrlen; - int socket; - - if (IsOpen()) Close(); - - addrlen = sizeof(struct sockaddr_in); - if ((socket = ::accept(Listener, (struct sockaddr*)&m_RemoteAddr, - &addrlen)) == -1) - return false; - - addrlen = sizeof(struct sockaddr_in); - if (::getsockname(socket, (struct sockaddr*)&m_LocalAddr, &addrlen) == -1) - return false; - - if (!cTBSource::Open(socket)) - return false; - - return true; -} - -RETURNS(cTBSocket, cTBSocket::Accept(void) const, ret) - ret.Accept(*this); -RETURN(ret) - -bool cTBSocket::Close(void) { - bool ret = true; - - if (!IsOpen()) - ERRNUL(EBADF); - - if (::close(*this) == -1) - ret = false; - - if (!cTBSource::Close()) - ret = false; - - memset(&m_LocalAddr, 0, sizeof(m_LocalAddr)); - memset(&m_RemoteAddr, 0, sizeof(m_RemoteAddr)); - - return ret; -} - -bool cTBSocket::Shutdown(int how) { - if (!IsOpen()) - ERRNUL(EBADF); - - return ::shutdown(*this, how) != -1; -} |