📄 utilities.cpp
字号:
// ========================================================
// Generic Utilities
//
// Design and Implementation by Floris van den Berg
// ========================================================
#include <time.h>
#include <winsock2.h>
#include "Utilities.h"
#include <boost/thread/thread.hpp>
// ========================================================
static boost::mutex s_mutex;
// ========================================================
inline _STL::string
InternalNtoa(in_addr &in) {
char *address = inet_ntoa(in);
return _STL::string(address);
}
// ========================================================
unsigned long
TCPIPResolveHost(const char *host) {
if (host != NULL) {
boost::mutex::scoped_lock scoped_lock(s_mutex);
unsigned long address = inet_addr(host);
if ((address == INADDR_NONE) && (strcmp(host, "255.255.255.255") != 0)) {
LPHOSTENT host_handle = gethostbyname(host);
return (host_handle) ? *((unsigned long *)(host_handle->h_addr)) : INADDR_ANY;
}
return address;
}
return INADDR_ANY;
}
_STL::string
TCPIPGetLocalHost(SOCKET socket) {
sockaddr_in addr;
int size = sizeof(sockaddr_in);
boost::mutex::scoped_lock scoped_lock(s_mutex);
if (getsockname(socket, (sockaddr *)&addr, &size) == 0)
return InternalNtoa(addr.sin_addr);
return "";
}
_STL::string
TCPIPGetPeerName(SOCKET socket) {
sockaddr_in addr;
int size = sizeof(sockaddr_in);
boost::mutex::scoped_lock scoped_lock(s_mutex);
if (getpeername(socket, (sockaddr *)&addr, &size) == 0)
return InternalNtoa(addr.sin_addr);
return "";
}
DWORD
EpGetTickCount() {
#ifdef WIN32
return GetTickCount();
#else
return clock();
#endif
}
void
EpDispatchSystemEvent(TRANSPORT_HANDLE handle, DWORD event, void *data, int size) {
EpEvent pm_event;
pm_event.protocol = CLSID_SYSTEM_PROTOCOL;
pm_event.msg = event;
pm_event.size = size;
pm_event.data = (unsigned char *)data;
pm_event.reference_id = 0;
EpDispatchEvent(handle, &pm_event);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -