Create helper function for printing the latest error on Windows
This commit is contained in:
parent
b919574be9
commit
4e54a0a8d2
14
src/debug.hh
14
src/debug.hh
|
|
@ -18,6 +18,20 @@ inline const char *className(const std::string& prettyFunction)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
static inline void win_get_last_error(void)
|
||||||
|
{
|
||||||
|
wchar_t *s = NULL;
|
||||||
|
FormatMessageW(
|
||||||
|
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
NULL, WSAGetLastError(),
|
||||||
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
(LPWSTR)&s, 0, NULL
|
||||||
|
);
|
||||||
|
fprintf(stderr, "%S %d\n", s, WSAGetLastError());
|
||||||
|
LocalFree(s);
|
||||||
|
}
|
||||||
|
|
||||||
#define LOG_LEVEL_ERROR "ERROR"
|
#define LOG_LEVEL_ERROR "ERROR"
|
||||||
#define LOG_LEVEL_WARN "WARNING"
|
#define LOG_LEVEL_WARN "WARNING"
|
||||||
#define LOG_LEVEL_INFO "INFO"
|
#define LOG_LEVEL_INFO "INFO"
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,8 @@ std::string kvz_rtp::hostname::get_hostname()
|
||||||
char buffer[NAME_MAXLEN];
|
char buffer[NAME_MAXLEN];
|
||||||
DWORD bufCharCount = NAME_MAXLEN;
|
DWORD bufCharCount = NAME_MAXLEN;
|
||||||
|
|
||||||
if(!GetComputerName((TCHAR *)buffer, &bufCharCount)) {
|
if (!GetComputerName((TCHAR *)buffer, &bufCharCount)) {
|
||||||
LOG_ERROR("Failed to get computer name!");
|
win_get_last_error();
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return std::string(buffer);
|
return std::string(buffer);
|
||||||
|
|
@ -43,8 +42,8 @@ std::string kvz_rtp::hostname::get_username()
|
||||||
char buffer[NAME_MAXLEN];
|
char buffer[NAME_MAXLEN];
|
||||||
DWORD bufCharCount = NAME_MAXLEN;
|
DWORD bufCharCount = NAME_MAXLEN;
|
||||||
|
|
||||||
if(!GetUserName((TCHAR *)buffer, &bufCharCount)) {
|
if (!GetUserName((TCHAR *)buffer, &bufCharCount)) {
|
||||||
LOG_ERROR("Failed to get user name!");
|
win_get_last_error();
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,7 @@ kvz_rtp::context::context()
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if ((rc = WSAStartup(MAKEWORD(2, 2), &wsd)) != 0) {
|
if ((rc = WSAStartup(MAKEWORD(2, 2), &wsd)) != 0) {
|
||||||
LOG_ERROR("Unable to load Winsock: %d\n", rc);
|
win_get_last_error();
|
||||||
/* TODO: how to stop everything?? */
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ rtp_error_t kvz_rtp::socket::init(short family, int type, int protocol)
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if ((socket_ = ::socket(family, type, protocol)) == INVALID_SOCKET) {
|
if ((socket_ = ::socket(family, type, protocol)) == INVALID_SOCKET) {
|
||||||
LOG_ERROR("todo windows specific error message");
|
win_get_last_error();
|
||||||
#else
|
#else
|
||||||
if ((socket_ = ::socket(family, type, protocol)) < 0) {
|
if ((socket_ = ::socket(family, type, protocol)) < 0) {
|
||||||
LOG_ERROR("Failed to create socket: %s", strerror(errno));
|
LOG_ERROR("Failed to create socket: %s", strerror(errno));
|
||||||
|
|
@ -67,6 +67,11 @@ rtp_error_t kvz_rtp::socket::bind(short family, unsigned host, short port)
|
||||||
sockaddr_in addr = create_sockaddr(family, host, port);
|
sockaddr_in addr = create_sockaddr(family, host, port);
|
||||||
|
|
||||||
if (::bind(socket_, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
if (::bind(socket_, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
win_get_last_error();
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "%s\n", strerror(errno));
|
||||||
|
#endif
|
||||||
LOG_ERROR("Biding to port %u failed!", port);
|
LOG_ERROR("Biding to port %u failed!", port);
|
||||||
return RTP_BIND_ERROR;
|
return RTP_BIND_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -134,8 +139,7 @@ rtp_error_t kvz_rtp::socket::__sendto(sockaddr_in& addr, uint8_t *buf, size_t bu
|
||||||
data_buf.len = buf_len;
|
data_buf.len = buf_len;
|
||||||
|
|
||||||
if (WSASendTo(socket_, &data_buf, 1, &sent_bytes, flags, (const struct sockaddr *)&addr, sizeof(addr_), NULL, NULL) == -1) {
|
if (WSASendTo(socket_, &data_buf, 1, &sent_bytes, flags, (const struct sockaddr *)&addr, sizeof(addr_), NULL, NULL) == -1) {
|
||||||
/* TODO: winsock specific error message */
|
win_get_last_error();
|
||||||
LOG_ERROR("Failed to send data!");
|
|
||||||
|
|
||||||
if (bytes_sent)
|
if (bytes_sent)
|
||||||
*bytes_sent = -1;
|
*bytes_sent = -1;
|
||||||
|
|
@ -192,7 +196,7 @@ rtp_error_t kvz_rtp::socket::__recvfrom(uint8_t *buf, size_t buf_len, int flags,
|
||||||
int32_t ret = ::recvfrom(socket_, (char *)buf, buf_len, flags, (SOCKADDR *)sender, (int *)len_ptr);
|
int32_t ret = ::recvfrom(socket_, (char *)buf, buf_len, flags, (SOCKADDR *)sender, (int *)len_ptr);
|
||||||
|
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
LOG_ERROR("recvfrom failed: %d", WSAGetLastError());
|
win_get_last_error();
|
||||||
|
|
||||||
if (bytes_read)
|
if (bytes_read)
|
||||||
*bytes_read = -1;
|
*bytes_read = -1;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue