Loading src/posix/socket.cpp +15 −3 Original line number Diff line number Diff line Loading @@ -53,15 +53,16 @@ std::atomic<int> netplus::socket::_InitCount(0); netplus::socket::socket(){ _SocketInfo=(ULONG_PTR)malloc(ADDRMAXSIZE); _SocketInfoLen=ADDRMAXSIZE; memset((void*)_SocketInfo,0,ADDRMAXSIZE); _SocketInfo=(ULONG_PTR)malloc(sizeof(struct addrinfo)); _SocketInfoLen=sizeof(struct addrinfo); memset((void*)_SocketInfo,0,sizeof(struct addrinfo)); _Type=-1; ++_InitCount; } netplus::socket::~socket(){ --_InitCount; free(((struct addrinfo*)_SocketInfo)->ai_addr); free((void*)_SocketInfo); } Loading Loading @@ -103,6 +104,17 @@ void netplus::socket::setTimeout(int sec){ } } void netplus::socket::copyAddrInfo(ULONG_PTR *dest, ULONG_PTR src){ memcpy((void*)*(dest),(void*)src,sizeof(struct addrinfo)); ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addr=(struct sockaddr*)malloc(((struct addrinfo*)src)->ai_addrlen); memcpy((void*)((struct addrinfo*)*(struct addrinfo**)dest)->ai_addr, (void*)((struct addrinfo*)src)->ai_addr, ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addrlen ); ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addrlen=((struct addrinfo*)src)->ai_addrlen; } SOCKET netplus::socket::fd() { return _Socket; } src/posix/tcp.cpp +4 −9 Original line number Diff line number Diff line Loading @@ -103,10 +103,7 @@ netplus::tcp::tcp(const char* addr, int port,int maxconnections,int sockopts) : rp->ai_protocol); if (_Socket == -1) continue; memcpy((void*)_SocketInfo,rp,sizeof(hints)); ((struct addrinfo*)_SocketInfo)->ai_next=nullptr; _SocketInfoLen= sizeof(hints); copyAddrInfo(&_SocketInfo,(ULONG_PTR)rp); break; } Loading Loading @@ -153,9 +150,8 @@ int netplus::tcp::getMaxconnections(){ void netplus::tcp::accept(socket *csock){ NetException exception; struct sockaddr myaddr; socklen_t myaddrlen=sizeof(myaddr); *csock=::accept(_Socket,(struct sockaddr *)&myaddr,&myaddrlen); *csock=::accept(_Socket,((struct addrinfo *)(csock->_SocketInfo))->ai_addr,&((struct addrinfo *)(csock->_SocketInfo))->ai_addrlen); if(csock->_Socket<0){ int etype=NetException::Error; if(errno==EAGAIN) Loading @@ -166,7 +162,6 @@ void netplus::tcp::accept(socket *csock){ exception[etype] << "Can't accept on Socket: " << errstr; throw exception; } memcpy((void*)csock->_SocketInfo,(void*)_SocketInfo,sizeof(struct addrinfo)); } void netplus::tcp::bind(){ Loading Loading @@ -245,7 +240,7 @@ size_t netplus::tcp::recvData(socket *csock, void* data, unsigned long size,int void netplus::tcp::connect(socket *ssock){ NetException exception; ((struct addrinfo*)_SocketInfo)->ai_family=((struct addrinfo*)ssock->_SocketInfo)->ai_family; copyAddrInfo(&_SocketInfo,ssock->_SocketInfo); if( (_Socket=::socket(((struct addrinfo*)_SocketInfo)->ai_family,SOCK_STREAM,0) ) < 0 ){ NetException exception; Loading src/posix/udp.cpp +5 −8 Original line number Diff line number Diff line Loading @@ -103,9 +103,7 @@ netplus::udp::udp(const char* addr, int port,int maxconnections,int sockopts) : rp->ai_protocol); if (_Socket == -1) continue; memcpy((void*)_SocketInfo,rp,sizeof(hints)); ((struct addrinfo*)_SocketInfo)->ai_next=nullptr; _SocketInfoLen=sizeof(rp); copyAddrInfo(&_SocketInfo,(ULONG_PTR)rp); break; } Loading Loading @@ -152,9 +150,8 @@ int netplus::udp::getMaxconnections(){ void netplus::udp::accept(socket *csock){ NetException exception; struct sockaddr myaddr; socklen_t myaddrlen=sizeof(myaddr); *csock=::accept(_Socket,(struct sockaddr *)&myaddr,&myaddrlen); *csock=::accept(_Socket,((struct addrinfo *)(csock->_SocketInfo))->ai_addr,&((struct addrinfo *)(csock->_SocketInfo))->ai_addrlen); if(csock->_Socket<0){ int etype=NetException::Error; if(errno==EAGAIN) Loading @@ -165,7 +162,7 @@ void netplus::udp::accept(socket *csock){ exception[etype] << "Can't accept on Socket: " << errstr; throw exception; } memcpy((void*)csock->_SocketInfo,(void*)_SocketInfo,sizeof(struct addrinfo)); } void netplus::udp::bind(){ Loading Loading @@ -240,7 +237,7 @@ size_t netplus::udp::recvData(socket *csock, void* data, unsigned long size,int void netplus::udp::connect(socket *ssock){ NetException exception; ((struct addrinfo*)_SocketInfo)->ai_family=((struct addrinfo*)ssock->_SocketInfo)->ai_family; copyAddrInfo(&_SocketInfo,ssock->_SocketInfo); if( (_Socket=::socket(((struct addrinfo*)_SocketInfo)->ai_family,SOCK_DGRAM,0) ) < 0 ){ NetException exception; Loading src/socket.h +2 −2 Original line number Diff line number Diff line Loading @@ -40,8 +40,6 @@ typedef unsigned long ULONG_PTR; #include <WinSock2.h> #endif #define ADDRMAXSIZE 512 namespace netplus { enum sockettype {TCP=0,UDP=1,SSL=2}; Loading Loading @@ -76,6 +74,8 @@ namespace netplus { int _Type; ULONG_PTR _Extension; static std::atomic<int> _InitCount; protected: void copyAddrInfo(ULONG_PTR *dest,ULONG_PTR src); }; class tcp : public socket{ Loading src/windows/socket.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -83,3 +83,13 @@ void netplus::socket::setnonblocking(){ SOCKET netplus::socket::fd() { return _Socket; } void netplus::socket::copyAddrInfo(ULONG_PTR *dest, ULONG_PTR src){ memcpy((void*)*(dest),(void*)src,sizeof(struct addrinfo)); ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addr=(struct sockaddr*)malloc(((struct addrinfo*)src)->ai_addrlen); memcpy((void*)((struct addrinfo*)*(struct addrinfo**)dest)->ai_addr, (void*)((struct addrinfo*)src)->ai_addr, ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addrlen ); ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addrlen=((struct addrinfo*)src)->ai_addrlen; } Loading
src/posix/socket.cpp +15 −3 Original line number Diff line number Diff line Loading @@ -53,15 +53,16 @@ std::atomic<int> netplus::socket::_InitCount(0); netplus::socket::socket(){ _SocketInfo=(ULONG_PTR)malloc(ADDRMAXSIZE); _SocketInfoLen=ADDRMAXSIZE; memset((void*)_SocketInfo,0,ADDRMAXSIZE); _SocketInfo=(ULONG_PTR)malloc(sizeof(struct addrinfo)); _SocketInfoLen=sizeof(struct addrinfo); memset((void*)_SocketInfo,0,sizeof(struct addrinfo)); _Type=-1; ++_InitCount; } netplus::socket::~socket(){ --_InitCount; free(((struct addrinfo*)_SocketInfo)->ai_addr); free((void*)_SocketInfo); } Loading Loading @@ -103,6 +104,17 @@ void netplus::socket::setTimeout(int sec){ } } void netplus::socket::copyAddrInfo(ULONG_PTR *dest, ULONG_PTR src){ memcpy((void*)*(dest),(void*)src,sizeof(struct addrinfo)); ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addr=(struct sockaddr*)malloc(((struct addrinfo*)src)->ai_addrlen); memcpy((void*)((struct addrinfo*)*(struct addrinfo**)dest)->ai_addr, (void*)((struct addrinfo*)src)->ai_addr, ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addrlen ); ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addrlen=((struct addrinfo*)src)->ai_addrlen; } SOCKET netplus::socket::fd() { return _Socket; }
src/posix/tcp.cpp +4 −9 Original line number Diff line number Diff line Loading @@ -103,10 +103,7 @@ netplus::tcp::tcp(const char* addr, int port,int maxconnections,int sockopts) : rp->ai_protocol); if (_Socket == -1) continue; memcpy((void*)_SocketInfo,rp,sizeof(hints)); ((struct addrinfo*)_SocketInfo)->ai_next=nullptr; _SocketInfoLen= sizeof(hints); copyAddrInfo(&_SocketInfo,(ULONG_PTR)rp); break; } Loading Loading @@ -153,9 +150,8 @@ int netplus::tcp::getMaxconnections(){ void netplus::tcp::accept(socket *csock){ NetException exception; struct sockaddr myaddr; socklen_t myaddrlen=sizeof(myaddr); *csock=::accept(_Socket,(struct sockaddr *)&myaddr,&myaddrlen); *csock=::accept(_Socket,((struct addrinfo *)(csock->_SocketInfo))->ai_addr,&((struct addrinfo *)(csock->_SocketInfo))->ai_addrlen); if(csock->_Socket<0){ int etype=NetException::Error; if(errno==EAGAIN) Loading @@ -166,7 +162,6 @@ void netplus::tcp::accept(socket *csock){ exception[etype] << "Can't accept on Socket: " << errstr; throw exception; } memcpy((void*)csock->_SocketInfo,(void*)_SocketInfo,sizeof(struct addrinfo)); } void netplus::tcp::bind(){ Loading Loading @@ -245,7 +240,7 @@ size_t netplus::tcp::recvData(socket *csock, void* data, unsigned long size,int void netplus::tcp::connect(socket *ssock){ NetException exception; ((struct addrinfo*)_SocketInfo)->ai_family=((struct addrinfo*)ssock->_SocketInfo)->ai_family; copyAddrInfo(&_SocketInfo,ssock->_SocketInfo); if( (_Socket=::socket(((struct addrinfo*)_SocketInfo)->ai_family,SOCK_STREAM,0) ) < 0 ){ NetException exception; Loading
src/posix/udp.cpp +5 −8 Original line number Diff line number Diff line Loading @@ -103,9 +103,7 @@ netplus::udp::udp(const char* addr, int port,int maxconnections,int sockopts) : rp->ai_protocol); if (_Socket == -1) continue; memcpy((void*)_SocketInfo,rp,sizeof(hints)); ((struct addrinfo*)_SocketInfo)->ai_next=nullptr; _SocketInfoLen=sizeof(rp); copyAddrInfo(&_SocketInfo,(ULONG_PTR)rp); break; } Loading Loading @@ -152,9 +150,8 @@ int netplus::udp::getMaxconnections(){ void netplus::udp::accept(socket *csock){ NetException exception; struct sockaddr myaddr; socklen_t myaddrlen=sizeof(myaddr); *csock=::accept(_Socket,(struct sockaddr *)&myaddr,&myaddrlen); *csock=::accept(_Socket,((struct addrinfo *)(csock->_SocketInfo))->ai_addr,&((struct addrinfo *)(csock->_SocketInfo))->ai_addrlen); if(csock->_Socket<0){ int etype=NetException::Error; if(errno==EAGAIN) Loading @@ -165,7 +162,7 @@ void netplus::udp::accept(socket *csock){ exception[etype] << "Can't accept on Socket: " << errstr; throw exception; } memcpy((void*)csock->_SocketInfo,(void*)_SocketInfo,sizeof(struct addrinfo)); } void netplus::udp::bind(){ Loading Loading @@ -240,7 +237,7 @@ size_t netplus::udp::recvData(socket *csock, void* data, unsigned long size,int void netplus::udp::connect(socket *ssock){ NetException exception; ((struct addrinfo*)_SocketInfo)->ai_family=((struct addrinfo*)ssock->_SocketInfo)->ai_family; copyAddrInfo(&_SocketInfo,ssock->_SocketInfo); if( (_Socket=::socket(((struct addrinfo*)_SocketInfo)->ai_family,SOCK_DGRAM,0) ) < 0 ){ NetException exception; Loading
src/socket.h +2 −2 Original line number Diff line number Diff line Loading @@ -40,8 +40,6 @@ typedef unsigned long ULONG_PTR; #include <WinSock2.h> #endif #define ADDRMAXSIZE 512 namespace netplus { enum sockettype {TCP=0,UDP=1,SSL=2}; Loading Loading @@ -76,6 +74,8 @@ namespace netplus { int _Type; ULONG_PTR _Extension; static std::atomic<int> _InitCount; protected: void copyAddrInfo(ULONG_PTR *dest,ULONG_PTR src); }; class tcp : public socket{ Loading
src/windows/socket.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -83,3 +83,13 @@ void netplus::socket::setnonblocking(){ SOCKET netplus::socket::fd() { return _Socket; } void netplus::socket::copyAddrInfo(ULONG_PTR *dest, ULONG_PTR src){ memcpy((void*)*(dest),(void*)src,sizeof(struct addrinfo)); ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addr=(struct sockaddr*)malloc(((struct addrinfo*)src)->ai_addrlen); memcpy((void*)((struct addrinfo*)*(struct addrinfo**)dest)->ai_addr, (void*)((struct addrinfo*)src)->ai_addr, ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addrlen ); ((struct addrinfo*)*(struct addrinfo**)dest)->ai_addrlen=((struct addrinfo*)src)->ai_addrlen; }