Loading src/posix/socket.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -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; } Loading src/posix/tcp.cpp +16 −32 Original line number Diff line number Diff line Loading @@ -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"; Loading @@ -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; } Loading Loading @@ -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; } Loading @@ -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; } Loading @@ -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); Loading @@ -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; } Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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; } src/posix/udp.cpp +47 −48 Original line number Diff line number Diff line Loading @@ -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"; Loading @@ -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; } Loading @@ -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; Loading @@ -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; } Loading @@ -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){ Loading @@ -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; } Loading @@ -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, Loading @@ -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; Loading @@ -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; } Loading @@ -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, Loading @@ -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; } Loading @@ -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); Loading @@ -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); Loading @@ -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; } src/socket.h +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ namespace netplus { virtual socket& operator=(SOCKET sock)=0; struct addrinfo _SocketInfo; ULONG_PTR _SocketInfo; int _SocketInfoLen; SOCKET _Socket; int _Type; Loading Loading
src/posix/socket.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -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; } Loading
src/posix/tcp.cpp +16 −32 Original line number Diff line number Diff line Loading @@ -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"; Loading @@ -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; } Loading Loading @@ -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; } Loading @@ -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; } Loading @@ -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); Loading @@ -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; } Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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; }
src/posix/udp.cpp +47 −48 Original line number Diff line number Diff line Loading @@ -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"; Loading @@ -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; } Loading @@ -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; Loading @@ -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; } Loading @@ -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){ Loading @@ -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; } Loading @@ -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, Loading @@ -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; Loading @@ -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; } Loading @@ -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, Loading @@ -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; } Loading @@ -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); Loading @@ -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); Loading @@ -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; }
src/socket.h +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ namespace netplus { virtual socket& operator=(SOCKET sock)=0; struct addrinfo _SocketInfo; ULONG_PTR _SocketInfo; int _SocketInfoLen; SOCKET _Socket; int _Type; Loading