Commit 813d0ac1 authored by jan.koester's avatar jan.koester
Browse files

fixed fixes

parent a7b2d167
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -53,9 +53,8 @@
std::atomic<int> netplus::socket::_InitCount(0);

netplus::socket::socket(){
    _Socket=-1;
    _SocketInfo=nullptr;
    _SocketInfoLen = 0;
    _SocketInfo=(ULONG_PTR)::malloc(sizeof(sockaddr));
    _SocketInfoLen=sizeof(sockaddr);
    _Type=-1;
    ++_InitCount;
}
+16 −32
Original line number Diff line number Diff line
@@ -52,8 +52,6 @@ netplus::tcp::tcp(const char* uxsocket,int maxconnections,int sockopts) : socket
    if(sockopts == -1)
        sockopts=SO_REUSEADDR;
    _Maxconnections=maxconnections;
    _SocketInfo = new struct sockaddr_un;
    memset(_SocketInfo,0,sizeof(struct sockaddr_un));
    ((struct sockaddr_un *)_SocketInfo)->sun_family = AF_UNIX;
    if(!uxsocket){
        exception[NetException::Critical] << "Can't copy Server UnixSocket";
@@ -66,7 +64,7 @@ netplus::tcp::tcp(const char* uxsocket,int maxconnections,int sockopts) : socket
        exception[NetException::Critical] << "Can't create TCP UnixSocket";
        throw exception;
    }
    _SocketInfoSize=sizeof(sockaddr_un);
    _SocketInfoLen=sizeof(sockaddr_un);
    setsockopt(_Socket,SOL_SOCKET,sockopts,&optval, sizeof(optval));
    _Type=sockettype::TCP;
}
@@ -100,17 +98,13 @@ netplus::tcp::tcp(const char* addr, int port,int maxconnections,int sockopts) :
        throw exception;
    }

    _SocketInfo=nullptr;

    for (rp = result; rp != nullptr; rp = rp->ai_next) {
        _Socket = ::socket(rp->ai_family, rp->ai_socktype,
                           rp->ai_protocol);
        if (_Socket == -1)
            continue;
        _SocketInfo = ::malloc(rp->ai_addrlen);
        memset(_SocketInfo, 0, rp->ai_addrlen);
        memcpy(_SocketInfo,rp->ai_addr,rp->ai_addrlen);
        _SocketInfoSize=rp->ai_addrlen;
        memcpy((void*)_SocketInfo,rp,sizeof(struct addrinfo));
        _SocketInfoLen=sizeof(rp);

        break;
    }
@@ -125,20 +119,16 @@ netplus::tcp::tcp(const char* addr, int port,int maxconnections,int sockopts) :
netplus::tcp::~tcp(){
    if(_Socket!=-1)
        ::close(_Socket);
    ::free(_SocketInfo);
    ::free((void*)_SocketInfo);
}

netplus::tcp::tcp() : socket() {
    _SocketInfo=::malloc(sizeof(struct sockaddr));
    _SocketInfoSize=sizeof(struct sockaddr);
    _Socket=-1;
    _Type=sockettype::TCP;
}

netplus::tcp::tcp(SOCKET sock) : socket(){
    _SocketInfo=::malloc(sizeof(struct sockaddr));
    _SocketInfoSize=sizeof(struct sockaddr);
     ((struct sockaddr*)_SocketInfo)->sa_family=AF_UNSPEC;
     ((struct addrinfo*)_SocketInfo)->ai_family=AF_UNSPEC;
    _Socket=sock;
    _Type=sockettype::TCP;
}
@@ -161,7 +151,7 @@ int netplus::tcp::getMaxconnections(){
    return _Maxconnections;
}

void netplus::tcp::accept(tcp *csock){
void netplus::tcp::accept(socket *csock){
    NetException exception;
    struct sockaddr myaddr;
    socklen_t myaddrlen=sizeof(myaddr);
@@ -176,14 +166,12 @@ void netplus::tcp::accept(tcp *csock){
        exception[etype] << "Can't accept on Socket: " << errstr;
        throw exception;
    }
    csock->_SocketInfoSize = myaddrlen;
    csock->_SocketInfo = malloc(myaddrlen);
    memcpy(csock->_SocketInfo,&myaddr,myaddrlen);
    memcpy((void*)csock->_SocketInfo,(void*)_SocketInfo,sizeof(struct addrinfo));
}

void netplus::tcp::bind(){
    NetException exception;
    if (::bind(_Socket,((const struct sockaddr *)_SocketInfo), _SocketInfoSize) < 0){
    if (::bind(_Socket,((const struct sockaddr *)_SocketInfo), _SocketInfoLen) < 0){
        exception[NetException::Error] << "Can't bind Server Socket";
        throw exception;
    }
@@ -202,8 +190,8 @@ size_t netplus::tcp::sendData(socket *csock, void* data, unsigned long size,int
                        data,
                        size,
                        flags,
                        (struct sockaddr *)csock->_SocketInfo,
                        sizeof(struct sockaddr)
                        ((struct addrinfo *)csock->_SocketInfo)->ai_addr,
                        ((struct addrinfo *)csock->_SocketInfo)->ai_addrlen
                     );
    if(rval<0){
        int etype=NetException::Error;
@@ -228,15 +216,14 @@ size_t netplus::tcp::recvData(socket *csock, void* data, unsigned long size){
}

size_t netplus::tcp::recvData(socket *csock, void* data, unsigned long size,int flags){

    NetException exception;

    int recvsize=::recvfrom(csock->_Socket,
                            data,
                            size,
                            flags,
                            (struct sockaddr *)csock->_SocketInfo,
                            (socklen_t*)&csock->_SocketInfoSize
                             ((struct addrinfo *)csock->_SocketInfo)->ai_addr,
                            &((struct addrinfo *)csock->_SocketInfo)->ai_addrlen
                         );
    if(recvsize<0){
        int etype=NetException::Error;
@@ -258,9 +245,9 @@ size_t netplus::tcp::recvData(socket *csock, void* data, unsigned long size,int
void netplus::tcp::connect(socket *ssock){
    NetException exception;

    ((struct sockaddr*)_SocketInfo)->sa_family=((struct sockaddr*)ssock->_SocketInfo)->sa_family;
    ((struct addrinfo*)_SocketInfo)->ai_family=((struct addrinfo*)ssock->_SocketInfo)->ai_family;

    if( (_Socket=::socket(((struct sockaddr*)_SocketInfo)->sa_family,SOCK_STREAM,0) ) < 0 ){
    if( (_Socket=::socket(((struct addrinfo*)_SocketInfo)->ai_family,SOCK_STREAM,0) ) < 0 ){
        NetException exception;
        char errstr[512];
        strerror_r_netplus(errno,errstr,512);
@@ -268,7 +255,7 @@ void netplus::tcp::connect(socket *ssock){
        throw exception;
    }

    if ( ::connect(_Socket,(struct sockaddr*)ssock->_SocketInfo,ssock->_SocketInfoSize) < 0) {
    if ( ::connect(_Socket,((struct addrinfo*)ssock->_SocketInfo)->ai_addr,((struct addrinfo*)ssock->_SocketInfo)->ai_addrlen) < 0) {

        char errstr[512];
        strerror_r_netplus(errno,errstr,512);
@@ -283,9 +270,6 @@ void netplus::tcp::getAddress(std::string &addr){
    if(!_SocketInfo)
        return;
    char ipaddr[INET6_ADDRSTRLEN];
    if(((struct sockaddr*)_SocketInfo)->sa_family==AF_INET6)
        inet_ntop(AF_INET6, &(((struct sockaddr_in6*)_SocketInfo)->sin6_addr), ipaddr, INET6_ADDRSTRLEN);
    else
        inet_ntop(AF_INET, &((struct sockaddr_in*)_SocketInfo)->sin_addr, ipaddr, INET_ADDRSTRLEN);
    inet_ntop(((struct addrinfo*)_SocketInfo)->ai_family,((struct addrinfo*)_SocketInfo)->ai_addr, ipaddr, ((struct addrinfo*)_SocketInfo)->ai_addrlen);
    addr=ipaddr;
}
+47 −48
Original line number Diff line number Diff line
@@ -46,23 +46,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "socket.h"
#include "error.h"

netplus::udp::udp() : socket() {
    _SocketInfo=::malloc(sizeof(sockaddr));
    _SocketInfoSize=sizeof(sockaddr);
    ((struct sockaddr*)_SocketInfo)->sa_family=AF_UNSPEC;
    _Socket=-1;
    _Type=sockettype::UDP;
}

netplus::udp::udp(const char* uxsocket,int maxconnections,int sockopts) : socket(){
    NetException exception;
    int optval = 1;
    if(sockopts == -1)
        sockopts=SO_REUSEADDR;
    _Maxconnections=maxconnections;

    _SocketInfo = new struct sockaddr_un;
    memset(_SocketInfo,0,sizeof(struct sockaddr_un));
    ((struct sockaddr_un *)_SocketInfo)->sun_family = AF_UNIX;
    if(!uxsocket){
        exception[NetException::Critical] << "Can't copy Server UnixSocket";
@@ -71,11 +60,11 @@ netplus::udp::udp(const char* uxsocket,int maxconnections,int sockopts) : socket
    _UxPath=uxsocket;
    memcpy(((struct sockaddr_un *)_SocketInfo)->sun_path,uxsocket,strlen(uxsocket)+1);

    if ((_Socket=::socket(AF_UNIX,SOCK_DGRAM, IPPROTO_UDP)) < 0){
    if ((_Socket=::socket(AF_UNIX,SOCK_DGRAM, 0)) < 0){
        exception[NetException::Critical] << "Can't create UDP UnixSocket";
        throw exception;
    }
    _SocketInfoSize=sizeof(sockaddr_un);
    _SocketInfoLen=sizeof(sockaddr_un);
    setsockopt(_Socket,SOL_SOCKET,sockopts,&optval, sizeof(optval));
    _Type=sockettype::UDP;
}
@@ -86,9 +75,10 @@ netplus::udp::udp(const char* addr, int port,int maxconnections,int sockopts) :
    if(sockopts == -1)
        sockopts=SO_REUSEADDR;

    struct addrinfo hints,*result,*rp;


    struct addrinfo hints,*result,*rp;

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_DGRAM;
@@ -99,23 +89,23 @@ netplus::udp::udp(const char* addr, int port,int maxconnections,int sockopts) :
    hints.ai_next = NULL;

    int tsock;

    char serv[512];
    snprintf(serv,512,"%d",port);

    if ((tsock=getaddrinfo(addr, serv,&hints,&result)) < 0) {
    if ((tsock=::getaddrinfo(addr, serv,&hints,&result)) < 0) {
        exception[NetException::Critical] << "Socket Invalid address/ Address not supported";
        throw exception;
    }

    for (rp = result; rp != NULL; rp = rp->ai_next) {
    for (rp = result; rp != nullptr; rp = rp->ai_next) {
        _Socket = ::socket(rp->ai_family, rp->ai_socktype,
                           rp->ai_protocol);
        if (_Socket == -1)
            continue;
        _SocketInfo = malloc(rp->ai_addrlen);
        memset(_SocketInfo, 0, rp->ai_addrlen);
        _SocketInfoSize=rp->ai_addrlen;
        memcpy(_SocketInfo,rp->ai_addr,rp->ai_addrlen);
        memcpy((void*)_SocketInfo,rp,sizeof(struct addrinfo));
        _SocketInfoLen=sizeof(rp);

        break;
    }

@@ -127,20 +117,22 @@ netplus::udp::udp(const char* addr, int port,int maxconnections,int sockopts) :
}

netplus::udp::~udp(){
    if(_Socket>=0)
    if(_Socket!=-1)
        ::close(_Socket);
    ::free(_SocketInfo);
    ::free((void*)_SocketInfo);
}

netplus::udp::udp() : socket() {
    _Socket=-1;
    _Type=sockettype::UDP;
}

netplus::udp::udp(SOCKET sock) : socket(){
    _SocketInfo=::malloc(sizeof(sockaddr));
    _SocketInfoSize=sizeof(sockaddr);
    ((struct sockaddr*)_SocketInfo)->sa_family=AF_UNSPEC;
     ((struct addrinfo*)_SocketInfo)->ai_family=AF_UNSPEC;
    _Socket=sock;
    _Type=sockettype::UDP;
}


void netplus::udp::listen(){
    NetException exception;
    if(::listen(_Socket,_Maxconnections) < 0){
@@ -154,27 +146,32 @@ netplus::udp& netplus::udp::operator=(int sock){
     return *this;
};


int netplus::udp::getMaxconnections(){
    return _Maxconnections;
}

void netplus::udp::accept(socket *csock){
    NetException exception;
    struct sockaddr_storage myaddr;
    socklen_t myaddrlen;
    struct sockaddr myaddr;
    socklen_t myaddrlen=sizeof(myaddr);
    *csock=::accept(_Socket,(struct sockaddr *)&myaddr,&myaddrlen);
    if(csock->_Socket<0){
        exception[NetException::Error] << "Can't accept on Socket";
        int etype=NetException::Error;
        if(errno==EAGAIN)
            etype=NetException::Note;
        char errstr[512];
        strerror_r_netplus(errno,errstr,512);

        exception[etype] << "Can't accept on Socket: " << errstr;
        throw exception;
    }
    csock->_SocketInfoSize = myaddrlen;
    csock->_SocketInfo = malloc(myaddrlen);
    memcpy(csock->_SocketInfo,&myaddr,myaddrlen);
    memcpy((void*)csock->_SocketInfo,(void*)_SocketInfo,sizeof(struct addrinfo));
}

void netplus::udp::bind(){
    NetException exception;
    if (::bind(_Socket,((const struct sockaddr *)_SocketInfo), _SocketInfoSize) < 0){
    if (::bind(_Socket,((const struct sockaddr *)_SocketInfo), _SocketInfoLen) < 0){
        exception[NetException::Error] << "Can't bind Server Socket";
        throw exception;
    }
@@ -186,7 +183,9 @@ size_t netplus::udp::sendData(socket *csock, void* data, unsigned long size){
}

size_t netplus::udp::sendData(socket *csock, void* data, unsigned long size,int flags){

    NetException exception;

    int rval=::send(csock->_Socket,
                        data,
                        size,
@@ -194,6 +193,7 @@ size_t netplus::udp::sendData(socket *csock, void* data, unsigned long size,int
                     );
    if(rval<0){
        int etype=NetException::Error;

        if(errno==EAGAIN)
            etype=NetException::Note;

@@ -202,9 +202,9 @@ size_t netplus::udp::sendData(socket *csock, void* data, unsigned long size,int

        exception[etype] << "Socket senddata failed on Socket: " << csock->_Socket
                                       << " ErrorMsg: " <<  errstr;

        throw exception;
    }

    return rval;
}

@@ -215,6 +215,7 @@ size_t netplus::udp::recvData(socket *csock, void* data, unsigned long size){

size_t netplus::udp::recvData(socket *csock, void* data, unsigned long size,int flags){
    NetException exception;

    int recvsize=::recv(csock->_Socket,
                            data,
                            size,
@@ -226,10 +227,11 @@ size_t netplus::udp::recvData(socket *csock, void* data, unsigned long size,int
        if(errno==EAGAIN)
            etype=NetException::Note;


        char errstr[512];
        strerror_r_netplus(errno,errstr,512);

        exception[etype] << "Socket recvData failed on Socket: " << csock->_Socket
        exception[etype] << "Socket recvdata failed on Socket: " << csock->_Socket
                                       << " ErrorMsg: " <<  errstr;
        throw exception;
    }
@@ -239,9 +241,9 @@ size_t netplus::udp::recvData(socket *csock, void* data, unsigned long size,int
void netplus::udp::connect(socket *ssock){
    NetException exception;

    ((struct sockaddr*)_SocketInfo)->sa_family=((struct sockaddr*)ssock->_SocketInfo)->sa_family;
    ((struct addrinfo*)_SocketInfo)->ai_family=((struct addrinfo*)ssock->_SocketInfo)->ai_family;

    if( (_Socket=::socket(((struct sockaddr*)_SocketInfo)->sa_family,SOCK_DGRAM,0) ) < 0 ){
    if( (_Socket=::socket(((struct addrinfo*)_SocketInfo)->ai_family,SOCK_DGRAM,0) ) < 0 ){
        NetException exception;
        char errstr[512];
        strerror_r_netplus(errno,errstr,512);
@@ -249,7 +251,8 @@ void netplus::udp::connect(socket *ssock){
        throw exception;
    }

    if ( ::connect(_Socket,(struct sockaddr*)ssock->_SocketInfo,ssock->_SocketInfoSize) < 0) {
    if ( ::connect(_Socket,((struct addrinfo*)ssock->_SocketInfo)->ai_addr,((struct addrinfo*)ssock->_SocketInfo)->ai_addrlen) < 0) {

        char errstr[512];
        strerror_r_netplus(errno,errstr,512);

@@ -258,15 +261,11 @@ void netplus::udp::connect(socket *ssock){
    }
}


void netplus::udp::getAddress(std::string &addr){
    if(!_SocketInfo)
        return;
    char ipaddr[INET6_ADDRSTRLEN];
    if(((struct sockaddr*)_SocketInfo)->sa_family==AF_INET6)
        inet_ntop(AF_INET6, &(((struct sockaddr_in6*)_SocketInfo)->sin6_addr), ipaddr, INET6_ADDRSTRLEN);
    else
        inet_ntop(AF_INET, &((struct sockaddr_in*)_SocketInfo)->sin_addr, ipaddr, INET_ADDRSTRLEN);
    inet_ntop(((struct addrinfo*)_SocketInfo)->ai_family,((struct addrinfo*)_SocketInfo)->ai_addr, ipaddr, ((struct addrinfo*)_SocketInfo)->ai_addrlen);
    addr=ipaddr;
}

+1 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ namespace netplus {

            virtual socket&          operator=(SOCKET sock)=0;

            struct addrinfo          _SocketInfo;
            ULONG_PTR                _SocketInfo;
            int                      _SocketInfoLen;
            SOCKET                   _Socket;
            int                      _Type;