mirror of
https://github.com/oxen-io/lokinet
synced 2023-12-14 06:53:00 +01:00
this is driving me at least mildly insane
we _never_ get to llarp::udp_listener::read
This commit is contained in:
parent
c1d07e99a0
commit
a361626af5
4 changed files with 34 additions and 36 deletions
|
@ -221,7 +221,12 @@ main(int argc, char *argv[])
|
|||
struct sockaddr_in m_address;
|
||||
int m_sockfd;
|
||||
|
||||
m_sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
#ifndef _WIN32
|
||||
m_sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
#else
|
||||
m_sockfd =
|
||||
WSASocket(AF_INET, SOCK_DGRAM, 0, nullptr, 0, WSA_FLAG_OVERLAPPED);
|
||||
#endif
|
||||
m_address.sin_family = AF_INET;
|
||||
m_address.sin_addr.s_addr = INADDR_ANY;
|
||||
m_address.sin_port = htons(server_port);
|
||||
|
|
|
@ -603,7 +603,7 @@ llarp_handle_dnsc_recvfrom(struct llarp_udp_io *const udp,
|
|||
llarp::LogDebug("Header got client responses for id: ", hdr->id);
|
||||
|
||||
// if we sent this out, then there's an id
|
||||
struct dns_tracker *tracker = (struct dns_tracker *)udp->user;
|
||||
struct dns_tracker *tracker = (struct dns_tracker *)udp->user;
|
||||
struct dnsc_answer_request *request = tracker->client_request[hdr->id].get();
|
||||
|
||||
// sometimes we'll get double responses
|
||||
|
@ -694,7 +694,7 @@ void
|
|||
llarp_host_resolved(dnsc_answer_request *const request)
|
||||
{
|
||||
dns_tracker *tracker = (dns_tracker *)request->context->tracker;
|
||||
auto val = std::find_if(
|
||||
auto val = std::find_if(
|
||||
tracker->client_request.begin(), tracker->client_request.end(),
|
||||
[request](
|
||||
std::pair< const uint32_t, std::unique_ptr< dnsc_answer_request > >
|
||||
|
@ -735,7 +735,7 @@ llarp_dnsc_init(struct dnsc_context *const dnsc,
|
|||
llarp::LogInfo("DNSc adding relay ", dnsc_sockaddr);
|
||||
dnsc->resolvers.push_back(dnsc_sockaddr);
|
||||
dnsc->tracker = &dns_udp_tracker;
|
||||
dnsc->logic = logic;
|
||||
dnsc->logic = logic;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -239,6 +239,7 @@ namespace llarp
|
|||
}
|
||||
/// reset errno
|
||||
errno = 0;
|
||||
SetLastError(0);
|
||||
}
|
||||
|
||||
std::unique_ptr< LossyWriteQueue_t > m_LossyWriteQueue;
|
||||
|
|
|
@ -144,7 +144,6 @@ namespace llarp
|
|||
WSABUF wbuf = {(u_long)sz, static_cast< char* >(buf)};
|
||||
// WSARecvFrom
|
||||
llarp::LogDebug("read ", sz, " bytes from socket");
|
||||
this->write = false;
|
||||
int ret = ::WSARecvFrom(std::get< SOCKET >(fd), &wbuf, 1, nullptr, &flags,
|
||||
addr, &slen, &portfd[0], nullptr);
|
||||
// 997 is the error code for queued ops
|
||||
|
@ -177,7 +176,6 @@ namespace llarp
|
|||
}
|
||||
// WSASendTo
|
||||
llarp::LogDebug("write ", sz, " bytes into socket");
|
||||
this->write = true;
|
||||
ssize_t sent = ::WSASendTo(std::get< SOCKET >(fd), &wbuf, 1, nullptr, 0,
|
||||
to, slen, &portfd[1], nullptr);
|
||||
int s_errno = ::WSAGetLastError();
|
||||
|
@ -297,16 +295,10 @@ struct llarp_win32_loop : public llarp_ev_loop
|
|||
tcp_connect(struct llarp_tcp_connecter* tcp, const sockaddr* remoteaddr)
|
||||
{
|
||||
// create socket
|
||||
DWORD on = 1;
|
||||
SOCKET fd = ::socket(remoteaddr->sa_family, SOCK_STREAM, 0);
|
||||
SOCKET fd = WSASocket(remoteaddr->sa_family, SOCK_STREAM, 0, nullptr, 0,
|
||||
WSA_FLAG_OVERLAPPED);
|
||||
if(fd == INVALID_SOCKET)
|
||||
return false;
|
||||
// set non blocking
|
||||
if(ioctlsocket(fd, FIONBIO, &on) == SOCKET_ERROR)
|
||||
{
|
||||
::closesocket(fd);
|
||||
return false;
|
||||
}
|
||||
llarp::tcp_conn* conn = new llarp::tcp_conn(this, fd, remoteaddr, tcp);
|
||||
add_ev(conn, true);
|
||||
conn->connect();
|
||||
|
@ -323,8 +315,8 @@ struct llarp_win32_loop : public llarp_ev_loop
|
|||
llarp::ev_io*
|
||||
bind_tcp(llarp_tcp_acceptor* tcp, const sockaddr* bindaddr)
|
||||
{
|
||||
DWORD on = 1;
|
||||
SOCKET fd = ::socket(bindaddr->sa_family, SOCK_STREAM, 0);
|
||||
SOCKET fd = WSASocket(bindaddr->sa_family, SOCK_STREAM, 0, nullptr, 0,
|
||||
WSA_FLAG_OVERLAPPED);
|
||||
if(fd == INVALID_SOCKET)
|
||||
return nullptr;
|
||||
socklen_t sz = sizeof(sockaddr_in);
|
||||
|
@ -353,7 +345,6 @@ struct llarp_win32_loop : public llarp_ev_loop
|
|||
llarp::ev_io* serv = new llarp::tcp_serv(this, fd, tcp);
|
||||
tcp->impl = serv;
|
||||
|
||||
ioctlsocket(fd, FIONBIO, &on);
|
||||
return serv;
|
||||
}
|
||||
|
||||
|
@ -375,28 +366,30 @@ struct llarp_win32_loop : public llarp_ev_loop
|
|||
{
|
||||
OVERLAPPED_ENTRY events[1024];
|
||||
memset(&events, 0, sizeof(OVERLAPPED_ENTRY) * 1024);
|
||||
ULONG numEvents = 0;
|
||||
if(::GetQueuedCompletionStatusEx(iocpfd, events, 1024, &numEvents, ms,
|
||||
false))
|
||||
ULONG result = 0;
|
||||
::GetQueuedCompletionStatusEx(iocpfd, events, 1024, &result, ms, false);
|
||||
ULONG idx = 0;
|
||||
while(idx < result)
|
||||
{
|
||||
for(ULONG idx = 0; idx < numEvents; ++idx)
|
||||
llarp::ev_io* ev =
|
||||
reinterpret_cast< llarp::ev_io* >(events[idx].lpCompletionKey);
|
||||
if(ev && events[idx].lpOverlapped)
|
||||
{
|
||||
llarp::ev_io* ev =
|
||||
reinterpret_cast< llarp::ev_io* >(events[idx].lpCompletionKey);
|
||||
if(ev)
|
||||
auto amount =
|
||||
std::min(EV_READ_BUF_SZ, events[idx].dwNumberOfBytesTransferred);
|
||||
if(ev->write)
|
||||
ev->flush_write_buffers(amount);
|
||||
else
|
||||
{
|
||||
auto amount =
|
||||
std::min(EV_READ_BUF_SZ, events[idx].dwNumberOfBytesTransferred);
|
||||
memcpy(readbuf, events[idx].lpOverlapped->Pointer, amount);
|
||||
ev->read(readbuf, amount);
|
||||
memcpy(readbuf, events[idx].lpOverlapped->Pointer, amount);
|
||||
ev->read(readbuf, amount);
|
||||
}
|
||||
}
|
||||
++idx;
|
||||
}
|
||||
tick_listeners();
|
||||
if(numEvents)
|
||||
return numEvents;
|
||||
else
|
||||
return -1;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// ok apparently this isn't being used yet...
|
||||
|
@ -454,8 +447,8 @@ struct llarp_win32_loop : public llarp_ev_loop
|
|||
default:
|
||||
return INVALID_SOCKET;
|
||||
}
|
||||
DWORD on = 1;
|
||||
SOCKET fd = ::socket(addr->sa_family, SOCK_DGRAM, 0);
|
||||
SOCKET fd = WSASocket(addr->sa_family, SOCK_DGRAM, 0, nullptr, 0,
|
||||
WSA_FLAG_OVERLAPPED);
|
||||
if(fd == INVALID_SOCKET)
|
||||
{
|
||||
perror("WSASocket()");
|
||||
|
@ -485,7 +478,6 @@ struct llarp_win32_loop : public llarp_ev_loop
|
|||
return INVALID_SOCKET;
|
||||
}
|
||||
llarp::LogDebug("socket fd is ", fd);
|
||||
ioctlsocket(fd, FIONBIO, &on);
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
@ -584,7 +576,7 @@ struct llarp_win32_loop : public llarp_ev_loop
|
|||
}
|
||||
|
||||
start_loop:
|
||||
//PostQueuedCompletionStatus(iocpfd, 0, ev->listener_id, nullptr);
|
||||
PostQueuedCompletionStatus(iocpfd, 0, ev->listener_id, nullptr);
|
||||
handlers.emplace_back(ev);
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue