finally get the right error on windows

fix

fix up errno on win32

test
pull/66/head
despair 6 years ago
parent 55670b6f82
commit 964e834fea

@ -111,11 +111,27 @@ llarp_ev_udp_sendto(struct llarp_udp_io *udp, const sockaddr *to,
const void *buf, size_t sz)
{
auto ret = static_cast< llarp::ev_io * >(udp->impl)->sendto(to, buf, sz);
#ifndef _WIN32
if(ret == -1 && errno != 0)
{
#else
if(ret == -1 && WSAGetLastError())
{
#endif
#ifndef _WIN32
llarp::LogWarn("sendto failed ", strerror(errno));
errno = 0;
}
#else
char ebuf[1024];
int err = WSAGetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, err, LANG_NEUTRAL, ebuf,
1024, nullptr);
llarp::LogWarn("sendto failed: ", buf, ":", err);
WSASetLastError(0);
}
#endif
return ret;
}

@ -248,17 +248,21 @@ namespace llarp
return;
}
m_BlockingWriteQueue->pop_front();
if(errno == EAGAIN || errno == EWOULDBLOCK)
int wsaerr = WSAGetLastError();
int syserr = GetLastError();
if(wsaerr == WSA_IO_PENDING || wsaerr == WSAEWOULDBLOCK
|| syserr == 997 || syserr == 21)
{
errno = 0;
SetLastError(0);
WSASetLastError(0);
return;
}
}
}
}
/// reset errno
errno = 0;
SetLastError(0);
WSASetLastError(0);
}
std::unique_ptr< LossyWriteQueue_t > m_LossyWriteQueue;
@ -586,7 +590,15 @@ namespace llarp
{
if(_conn)
{
#ifndef _WIN32
llarp::LogError("tcp_conn error: ", strerror(errno));
#else
char ebuf[1024];
int err = WSAGetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, err, LANG_NEUTRAL,
ebuf, 1024, nullptr);
llarp::LogError("tcp_conn error: ", ebuf);
#endif
if(_conn->error)
_conn->error(_conn);
}
@ -632,7 +644,7 @@ namespace llarp
struct llarp_ev_loop
{
byte_t readbuf[EV_READ_BUF_SZ] = {0};
llarp_time_t _now = 0;
llarp_time_t _now = 0;
virtual bool
init() = 0;
virtual int

@ -65,17 +65,21 @@ namespace llarp
llarp::LogDebug("connected immedidately");
connected();
}
else if(errno == EINPROGRESS)
else if(WSAGetLastError() == WSAEINPROGRESS)
{
// in progress
llarp::LogDebug("connect in progress");
errno = 0;
WSASetLastError(0);
return;
}
else if(_conn->error)
{
// wtf?
llarp::LogError("error connecting ", strerror(errno));
char ebuf[1024];
int err = WSAGetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, err, LANG_NEUTRAL,
ebuf, 1024, nullptr);
llarp::LogError("error connecting: ", ebuf);
_conn->error(_conn);
}
}
@ -86,7 +90,11 @@ namespace llarp
int new_fd = ::accept(fd.socket, nullptr, nullptr);
if(new_fd == -1)
{
llarp::LogError("failed to accept on ", fd.socket, ":", strerror(errno));
char ebuf[1024];
int err = WSAGetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, err, LANG_NEUTRAL,
ebuf, 1024, nullptr);
llarp::LogError("failed to accept on ", fd.socket, ":", ebuf);
return -1;
}
// build handler
@ -170,7 +178,11 @@ namespace llarp
}
if(tuntap_up(tunif) == -1)
{
llarp::LogWarn("failed to put interface up: ", strerror(errno));
char ebuf[1024];
int err = GetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, err, LANG_NEUTRAL,
ebuf, 1024, nullptr);
llarp::LogWarn("failed to put interface up: ", ebuf);
return false;
}
@ -238,7 +250,11 @@ namespace llarp
ssize_t sent = ::sendto(fd.socket, (char*)data, sz, 0, to, slen);
if(sent == -1)
{
llarp::LogWarn(strerror(errno));
char ebuf[1024];
int err = WSAGetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, err, LANG_NEUTRAL,
ebuf, 1024, nullptr);
llarp::LogWarn(ebuf);
}
return sent;
}

@ -330,12 +330,24 @@ namespace llarp
static_cast< LinkLayer* >(utp_context_get_userdata(arg->context));
llarp::LogDebug("utp_sendto ", Addr(*arg->address), " ", arg->len,
" bytes");
#ifndef _WIN32
if(::sendto(l->m_udp.fd, (char*)arg->buf, arg->len, arg->flags,
arg->address, arg->address_len)
== -1
&& errno)
#else
WSASetLastError(0);
if(::sendto(l->m_udp.fd, (char*)arg->buf, arg->len, arg->flags,
arg->address, arg->address_len)
== -1)
#endif
{
llarp::LogError("sendto failed: ", strerror(errno));
char buf[1024];
int err = WSAGetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, err, LANG_NEUTRAL,
buf, 1024, nullptr);
llarp::LogError("sendto failed: ", buf);
llarp::LogInfo("flags: ", arg->flags);
}
return 0;
}

Loading…
Cancel
Save