mirror of
https://github.com/yse/easy_profiler.git
synced 2024-12-28 01:04:41 +08:00
common code for linux and windows
This commit is contained in:
parent
38eecc722d
commit
4c73886233
@ -54,10 +54,9 @@ public:
|
|||||||
|
|
||||||
CONNECTION_STATE_DISCONNECTED
|
CONNECTION_STATE_DISCONNECTED
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void checkResult(int result);
|
void checkResult(int result);
|
||||||
bool checkSocket(socket_t s) const;
|
bool checkSocket(socket_t s) const;
|
||||||
static int _close(socket_t s);
|
static int _close(socket_t s);
|
||||||
@ -69,17 +68,13 @@ private:
|
|||||||
|
|
||||||
int wsaret = -1;
|
int wsaret = -1;
|
||||||
|
|
||||||
#ifndef _WIN32
|
struct hostent * server;
|
||||||
struct sockaddr_in serv_addr;
|
struct sockaddr_in serv_addr;
|
||||||
struct hostent *server = nullptr;
|
|
||||||
#else
|
|
||||||
struct addrinfo *result = NULL;
|
|
||||||
struct addrinfo hints;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
ConnectionState m_state = CONNECTION_STATE_UNKNOWN;
|
ConnectionState m_state = CONNECTION_STATE_UNKNOWN;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
EasySocket();
|
EasySocket();
|
||||||
~EasySocket();
|
~EasySocket();
|
||||||
|
|
||||||
|
@ -26,6 +26,13 @@ add_definitions(
|
|||||||
-D_BUILD_PROFILER
|
-D_BUILD_PROFILER
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
add_definitions(
|
||||||
|
-D_WINSOCK_DEPRECATED_NO_WARNINGS
|
||||||
|
)
|
||||||
|
endif(WIN32)
|
||||||
|
|
||||||
|
|
||||||
add_library(${PROJECT_NAME} SHARED ${SOURCES})
|
add_library(${PROJECT_NAME} SHARED ${SOURCES})
|
||||||
|
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
|
@ -218,10 +218,21 @@ int EasySocket::accept()
|
|||||||
return m_replySocket;
|
return m_replySocket;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _WIN32
|
bool EasySocket::setAddress(const char *serv, uint16_t portno)
|
||||||
#include <strings.h>
|
{
|
||||||
#include <errno.h>
|
server = gethostbyname(serv);
|
||||||
|
if (server == NULL) {
|
||||||
|
return false;
|
||||||
|
//fprintf(stderr,"ERROR, no such host\n");
|
||||||
|
}
|
||||||
|
memset((char *)&serv_addr, 0, sizeof(serv_addr));
|
||||||
|
serv_addr.sin_family = AF_INET;
|
||||||
|
memcpy((char *)&serv_addr.sin_addr.s_addr, (char *)server->h_addr, server->h_length);
|
||||||
|
|
||||||
|
serv_addr.sin_port = htons(portno);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int EasySocket::connect()
|
int EasySocket::connect()
|
||||||
{
|
{
|
||||||
@ -230,6 +241,7 @@ int EasySocket::connect()
|
|||||||
//fprintf(stderr,"ERROR, no such host\n");
|
//fprintf(stderr,"ERROR, no such host\n");
|
||||||
}
|
}
|
||||||
int res = ::connect(m_socket,(struct sockaddr *) &serv_addr,sizeof(serv_addr));
|
int res = ::connect(m_socket,(struct sockaddr *) &serv_addr,sizeof(serv_addr));
|
||||||
|
checkResult(res);
|
||||||
if(res == 0){
|
if(res == 0){
|
||||||
|
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
@ -243,66 +255,3 @@ int EasySocket::connect()
|
|||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EasySocket::setAddress(const char *serv, uint16_t portno)
|
|
||||||
{
|
|
||||||
server = gethostbyname(serv);
|
|
||||||
if (server == NULL) {
|
|
||||||
return false;
|
|
||||||
//fprintf(stderr,"ERROR, no such host\n");
|
|
||||||
}
|
|
||||||
bzero((char *) &serv_addr, sizeof(serv_addr));
|
|
||||||
serv_addr.sin_family = AF_INET;
|
|
||||||
bcopy((char *)server->h_addr,
|
|
||||||
(char *)&serv_addr.sin_addr.s_addr,
|
|
||||||
server->h_length);
|
|
||||||
serv_addr.sin_port = htons(portno);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
bool EasySocket::setAddress(const char *serv, uint16_t portno)
|
|
||||||
{
|
|
||||||
ZeroMemory(&hints, sizeof(hints));
|
|
||||||
hints.ai_family = AF_UNSPEC;
|
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
|
||||||
hints.ai_protocol = IPPROTO_TCP;
|
|
||||||
int iResult;
|
|
||||||
char buffer[20] = {};
|
|
||||||
_itoa(portno, buffer, 10);
|
|
||||||
iResult = getaddrinfo(serv, buffer, &hints, &result);
|
|
||||||
if (iResult != 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int EasySocket::connect()
|
|
||||||
{
|
|
||||||
if (!m_socket || !result){
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Connect to server.
|
|
||||||
auto iResult = ::connect(m_socket, result->ai_addr, (int)result->ai_addrlen);
|
|
||||||
checkResult(iResult);
|
|
||||||
if (iResult == SOCKET_ERROR) {
|
|
||||||
return iResult;
|
|
||||||
}
|
|
||||||
/**/
|
|
||||||
struct timeval tv;
|
|
||||||
|
|
||||||
tv.tv_sec = 1;
|
|
||||||
tv.tv_usec = 0;
|
|
||||||
|
|
||||||
setsockopt(m_socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval));
|
|
||||||
|
|
||||||
m_replySocket = m_socket;
|
|
||||||
|
|
||||||
return iResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -640,9 +640,6 @@ void ProfileManager::startListen()
|
|||||||
dumpBlocksToStream(os);
|
dumpBlocksToStream(os);
|
||||||
dm.size = (uint32_t)os.stream().str().length();
|
dm.size = (uint32_t)os.stream().str().length();
|
||||||
|
|
||||||
|
|
||||||
//dm.size = 8192*4;
|
|
||||||
|
|
||||||
int packet_size = int(sizeof(dm)) + int(dm.size);
|
int packet_size = int(sizeof(dm)) + int(dm.size);
|
||||||
|
|
||||||
char *sendbuf = new char[packet_size];
|
char *sendbuf = new char[packet_size];
|
||||||
@ -654,16 +651,15 @@ void ProfileManager::startListen()
|
|||||||
bytes = socket.send(sendbuf, packet_size);
|
bytes = socket.send(sendbuf, packet_size);
|
||||||
hasConnect = bytes > 0;
|
hasConnect = bytes > 0;
|
||||||
|
|
||||||
std::string tempfilename = "test_snd.prof";
|
/*std::string tempfilename = "test_snd.prof";
|
||||||
std::ofstream of(tempfilename, std::fstream::binary);
|
std::ofstream of(tempfilename, std::fstream::binary);
|
||||||
of.write((const char*)os.stream().str().c_str(), dm.size);
|
of.write((const char*)os.stream().str().c_str(), dm.size);
|
||||||
of.close();
|
of.close();*/
|
||||||
|
|
||||||
delete[] sendbuf;
|
delete[] sendbuf;
|
||||||
//std::this_thread::sleep_for(std::chrono::seconds(2));
|
|
||||||
replyMessage.type = profiler::net::MESSAGE_TYPE_REPLY_END_SEND_BLOCKS;
|
replyMessage.type = profiler::net::MESSAGE_TYPE_REPLY_END_SEND_BLOCKS;
|
||||||
bytes = socket.send(&replyMessage, sizeof(replyMessage));
|
bytes = socket.send(&replyMessage, sizeof(replyMessage));
|
||||||
//hasConnect = bytes > 0;
|
hasConnect = bytes > 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user