Added stubs for poll/select, improved selftest/echotest, Added ringbuffer for more efficient RX/TX

This commit is contained in:
Joseph Henry
2017-07-12 11:44:31 -07:00
parent 78d97f7826
commit 494ec2508c
12 changed files with 1547 additions and 829 deletions

View File

@@ -221,18 +221,21 @@ namespace ZeroTier {
void SocketTap::phyOnUnixData(PhySocket *sock, void **uptr, void *data, ssize_t len)
{
//DEBUG_INFO();
//DEBUG_ATTN("sock->fd=%d", _phy.getDescriptor(sock));
Connection *conn = (Connection*)*uptr;
if(!conn)
return;
if(len)
if(len){
Write(conn, data, len);
}
return;
}
void SocketTap::phyOnUnixWritable(PhySocket *sock,void **uptr,bool stack_invoked)
{
DEBUG_INFO();
//exit(0);
if(sock)
Read(sock,uptr,stack_invoked);
}
@@ -270,11 +273,13 @@ namespace ZeroTier {
}
void SocketTap::Read(PhySocket *sock,void **uptr,bool stack_invoked) {
DEBUG_INFO();
if(picostack)
picostack->pico_Read(this, sock, (Connection*)uptr, stack_invoked);
}
void SocketTap::Write(Connection *conn, void *data, ssize_t len) {
//DEBUG_INFO();
if(picostack)
picostack->pico_Write(conn, data, len);
}
@@ -284,6 +289,7 @@ namespace ZeroTier {
DEBUG_ERROR("invalid connection");
return;
}
//DEBUG_INFO("A");
picostack->pico_Close(conn);
if(!conn->sock) {
// DEBUG_EXTRA("invalid PhySocket");
@@ -291,10 +297,22 @@ namespace ZeroTier {
}
// Here we assume _tcpconns_m is already locked by caller
// FIXME: is this assumption still valid
if(conn->sock)
_phy.close(conn->sock, false);
if(conn->state==ZT_SOCK_STATE_LISTENING)
{
//DEBUG_INFO("B");
// since we never wrapped this socket
DEBUG_INFO("in LISTENING state, no need to close in PhyIO");
return;
}
else
{
//DEBUG_INFO("C");
if(conn->sock)
_phy.close(conn->sock, false);
}
close(_phy.getDescriptor(conn->sock));
//DEBUG_INFO("D");
for(size_t i=0;i<_Connections.size();++i) {
if(_Connections[i] == conn){
// FIXME: double free issue exists here (potentially)