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) const void *buf, size_t sz)
{ {
auto ret = static_cast< llarp::ev_io * >(udp->impl)->sendto(to, buf, sz); auto ret = static_cast< llarp::ev_io * >(udp->impl)->sendto(to, buf, sz);
#ifndef _WIN32
if(ret == -1 && errno != 0) if(ret == -1 && errno != 0)
{ {
#else
if(ret == -1 && WSAGetLastError())
{
#endif
#ifndef _WIN32
llarp::LogWarn("sendto failed ", strerror(errno)); llarp::LogWarn("sendto failed ", strerror(errno));
errno = 0; 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; return ret;
} }

@ -248,17 +248,21 @@ namespace llarp
return; return;
} }
m_BlockingWriteQueue->pop_front(); 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; return;
} }
} }
} }
} }
/// reset errno /// reset errno
errno = 0;
SetLastError(0); SetLastError(0);
WSASetLastError(0);
} }
std::unique_ptr< LossyWriteQueue_t > m_LossyWriteQueue; std::unique_ptr< LossyWriteQueue_t > m_LossyWriteQueue;
@ -586,7 +590,15 @@ namespace llarp
{ {
if(_conn) if(_conn)
{ {
#ifndef _WIN32
llarp::LogError("tcp_conn error: ", strerror(errno)); 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) if(_conn->error)
_conn->error(_conn); _conn->error(_conn);
} }
@ -632,7 +644,7 @@ namespace llarp
struct llarp_ev_loop struct llarp_ev_loop
{ {
byte_t readbuf[EV_READ_BUF_SZ] = {0}; byte_t readbuf[EV_READ_BUF_SZ] = {0};
llarp_time_t _now = 0; llarp_time_t _now = 0;
virtual bool virtual bool
init() = 0; init() = 0;
virtual int virtual int

@ -65,17 +65,21 @@ namespace llarp
llarp::LogDebug("connected immedidately"); llarp::LogDebug("connected immedidately");
connected(); connected();
} }
else if(errno == EINPROGRESS) else if(WSAGetLastError() == WSAEINPROGRESS)
{ {
// in progress // in progress
llarp::LogDebug("connect in progress"); llarp::LogDebug("connect in progress");
errno = 0; WSASetLastError(0);
return; return;
} }
else if(_conn->error) else if(_conn->error)
{ {
// wtf? // 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); _conn->error(_conn);
} }
} }
@ -86,7 +90,11 @@ namespace llarp
int new_fd = ::accept(fd.socket, nullptr, nullptr); int new_fd = ::accept(fd.socket, nullptr, nullptr);
if(new_fd == -1) 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; return -1;
} }
// build handler // build handler
@ -170,7 +178,11 @@ namespace llarp
} }
if(tuntap_up(tunif) == -1) 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; return false;
} }
@ -238,7 +250,11 @@ namespace llarp
ssize_t sent = ::sendto(fd.socket, (char*)data, sz, 0, to, slen); ssize_t sent = ::sendto(fd.socket, (char*)data, sz, 0, to, slen);
if(sent == -1) 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; return sent;
} }

@ -330,12 +330,24 @@ namespace llarp
static_cast< LinkLayer* >(utp_context_get_userdata(arg->context)); static_cast< LinkLayer* >(utp_context_get_userdata(arg->context));
llarp::LogDebug("utp_sendto ", Addr(*arg->address), " ", arg->len, llarp::LogDebug("utp_sendto ", Addr(*arg->address), " ", arg->len,
" bytes"); " bytes");
#ifndef _WIN32
if(::sendto(l->m_udp.fd, (char*)arg->buf, arg->len, arg->flags, if(::sendto(l->m_udp.fd, (char*)arg->buf, arg->len, arg->flags,
arg->address, arg->address_len) arg->address, arg->address_len)
== -1 == -1
&& errno) && 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; return 0;
} }

Loading…
Cancel
Save