summaryrefslogtreecommitdiff
path: root/node/TcpSocket.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-04-01 15:55:05 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-04-01 15:55:05 -0700
commit0e1fc06a6f3b5c7aaa06ba370f85337176ae8a85 (patch)
treea7b73495b52736d100b0dfa82b38883d118edd2c /node/TcpSocket.cpp
parentc3b41c289d891781b75819a00ec927c14842b6cd (diff)
downloadinfinitytier-0e1fc06a6f3b5c7aaa06ba370f85337176ae8a85.tar.gz
infinitytier-0e1fc06a6f3b5c7aaa06ba370f85337176ae8a85.zip
The remove paths on send fail thing in Peer.cpp was not well thought out, and there is no point in mallocing the TCP write buffer.
Diffstat (limited to 'node/TcpSocket.cpp')
-rw-r--r--node/TcpSocket.cpp25
1 files changed, 3 insertions, 22 deletions
diff --git a/node/TcpSocket.cpp b/node/TcpSocket.cpp
index b21cbd5e..bc0357fd 100644
--- a/node/TcpSocket.cpp
+++ b/node/TcpSocket.cpp
@@ -48,8 +48,6 @@
#include <signal.h>
#endif
-#define ZT_TCP_MAX_SENDQ_LENGTH (ZT_SOCKET_MAX_MESSAGE_LEN * 8)
-
namespace ZeroTier {
TcpSocket::~TcpSocket()
@@ -59,8 +57,6 @@ TcpSocket::~TcpSocket()
#else
::close(_sock);
#endif
- if (_outbuf)
- ::free(_outbuf);
//printf("!!! TCP SOCKET DESTROYED @%.16llx to %s\r\n",(unsigned long long)this,_remote.toString().c_str());
}
@@ -72,26 +68,11 @@ bool TcpSocket::send(const InetAddress &to,const void *msg,unsigned int msglen)
return true; // sanity check
Mutex::Lock _l(_writeLock);
+
bool writeInProgress = ((_outptr != 0)||(_connecting));
- // Ensure that _outbuf is large enough
- unsigned int newptr = _outptr + 5 + msglen;
- if (newptr > _outbufsize) {
- unsigned int newbufsize = _outbufsize;
- while (newbufsize < newptr)
- newbufsize += ZT_SOCKET_MAX_MESSAGE_LEN;
- if (newbufsize > ZT_TCP_MAX_SENDQ_LENGTH)
- return false; // cannot send, outbuf full
- unsigned char *newbuf = (unsigned char *)::malloc(newbufsize);
- if (!newbuf)
- return false; // cannot send, no memory
- _outbufsize = newbufsize;
- if (_outbuf) {
- memcpy(newbuf,_outbuf,_outptr);
- ::free(_outbuf);
- }
- _outbuf = newbuf;
- }
+ if ((_outptr + 5 + msglen) > (unsigned int)sizeof(_outbuf))
+ return false;
_outbuf[_outptr++] = 0x17; // look like TLS data
_outbuf[_outptr++] = 0x03;