diff --git a/include/ZeroTierSDK.h b/include/ZeroTierSDK.h index 4e84caf..cb10eec 100644 --- a/include/ZeroTierSDK.h +++ b/include/ZeroTierSDK.h @@ -70,12 +70,12 @@ #define ZT_ERR_GENERAL_FAILURE -88 // Since extra time is required to send a mesage via a socket through the -// stack and ZT service, calling a zclose() immediately after a "successful" -// zwrite() might cause data loss, for this reason, sockets will SO_LINGER for +// stack and ZT service, calling a zts_close() immediately after a "successful" +// zts_write() might cause data loss, for this reason, sockets will SO_LINGER for // a short period of time by default as a precaution. -#define ZT_SOCK_BEHAVIOR_LINGER false -#define ZT_SOCK_BEHAVIOR_LINGER_TIME 2 // s +#define ZT_SOCK_BEHAVIOR_LINGER true +#define ZT_SOCK_BEHAVIOR_LINGER_TIME 1 // s /****************************************************************************/ /* Socket API Signatures */ diff --git a/src/ZeroTierSDK.cpp b/src/ZeroTierSDK.cpp index 5e84ece..bb727de 100644 --- a/src/ZeroTierSDK.cpp +++ b/src/ZeroTierSDK.cpp @@ -439,7 +439,7 @@ int zts_connect(ZT_CONNECT_SIG) { ZeroTier::SocketTap *tap; if(conn) { - char ipstr[INET6_ADDRSTRLEN];//, nm_str[INET6_ADDRSTRLEN]; + char ipstr[INET6_ADDRSTRLEN]; memset(ipstr, 0, INET6_ADDRSTRLEN); ZeroTier::InetAddress iaddr; @@ -933,10 +933,13 @@ int zts_fcntl(ZT_FCNTL_SIG) errno = EBADF; err = -1; } - err = fcntl(fd, cmd, flags); + else { + err = fcntl(fd, cmd, flags); + } return err; } +// TODO ssize_t zts_sendto(ZT_SENDTO_SIG) { DEBUG_INFO("fd = %d", fd); @@ -945,9 +948,13 @@ ssize_t zts_sendto(ZT_SENDTO_SIG) errno = EBADF; err = -1; } + else { + err = sendto(fd, buf, len, flags, addr, addrlen); + } return err; } +// TODO ssize_t zts_sendmsg(ZT_SENDMSG_SIG) { DEBUG_INFO("fd = %d", fd); @@ -956,9 +963,13 @@ ssize_t zts_sendmsg(ZT_SENDMSG_SIG) errno = EBADF; err = -1; } + else { + err = sendmsg(fd, msg, flags); + } return err; } +// TODO ssize_t zts_recvfrom(ZT_RECVFROM_SIG) { DEBUG_INFO("fd = %d", fd); @@ -967,9 +978,13 @@ ssize_t zts_recvfrom(ZT_RECVFROM_SIG) errno = EBADF; err = -1; } + else { + err = recvfrom(fd, buf, len, flags, addr, addrlen); + } return err; } +// TODO ssize_t zts_recvmsg(ZT_RECVMSG_SIG) { DEBUG_INFO("fd = %d", fd); @@ -978,6 +993,9 @@ ssize_t zts_recvmsg(ZT_RECVMSG_SIG) errno = EBADF; err = -1; } + else { + err = recvmsg(fd, msg, flags); + } return err; } diff --git a/zto/service/OneService.cpp b/zto/service/OneService.cpp index 1fabb7d..b96f3ae 100644 --- a/zto/service/OneService.cpp +++ b/zto/service/OneService.cpp @@ -1022,7 +1022,7 @@ public: for(it = _nets.begin(); it != _nets.end(); it++) { if(it->second.tap) { for(int j=0; jsecond.tap->_ips.size(); j++) { - if(it->second.tap->_ips[j].isEqualPrefix(addr) || it->second.tap->_ips[j].ipsEqual(addr)) { + if(it->second.tap->_ips[j].isEqualPrefix(addr) || it->second.tap->_ips[j].ipsEqual(addr) || it->second.tap->_ips[j].containsAddress(addr)) { return it->second.tap; } }