summaryrefslogtreecommitdiff
path: root/tools/socket.c
diff options
context:
space:
mode:
authorzwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf>2006-01-24 13:11:45 +0000
committerzwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf>2006-01-24 13:11:45 +0000
commite1dadf2dbdd2bcf65517310498ded03c821e463e (patch)
treedec66c46bd95574cd935883c8339cc80a5518bfc /tools/socket.c
parent8f713939e81110b37fb289081216b3550c708c1f (diff)
downloadvdr-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.c135
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;
-}