mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-12-14 08:39:27 +08:00
ScrollView: remove custom implementation of GetAddrInfo
This commit is contained in:
parent
9cd60b2b90
commit
57bf215d14
@ -327,60 +327,6 @@ static void TessFreeAddrInfo(struct addrinfo* addr_info) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Non-linux version of getaddrinfo()
|
|
||||||
#if !defined(__linux__)
|
|
||||||
static int GetAddrInfoNonLinux(const char* hostname, int port,
|
|
||||||
struct addrinfo** addr_info) {
|
|
||||||
// Get the host data depending on the OS.
|
|
||||||
struct sockaddr_in* address;
|
|
||||||
*addr_info = new struct addrinfo;
|
|
||||||
memset(*addr_info, 0, sizeof(struct addrinfo));
|
|
||||||
address = new struct sockaddr_in;
|
|
||||||
memset(address, 0, sizeof(struct sockaddr_in));
|
|
||||||
|
|
||||||
(*addr_info)->ai_addr = (struct sockaddr*) address;
|
|
||||||
(*addr_info)->ai_addrlen = sizeof(struct sockaddr);
|
|
||||||
(*addr_info)->ai_family = AF_INET;
|
|
||||||
(*addr_info)->ai_socktype = SOCK_STREAM;
|
|
||||||
|
|
||||||
struct hostent *name;
|
|
||||||
#ifdef _WIN32
|
|
||||||
WSADATA wsaData;
|
|
||||||
WSAStartup(MAKEWORD(1, 1), &wsaData);
|
|
||||||
name = gethostbyname(hostname);
|
|
||||||
#else
|
|
||||||
name = gethostbyname(hostname);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (name == nullptr) {
|
|
||||||
TessFreeAddrInfo(*addr_info);
|
|
||||||
*addr_info = nullptr;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fill in the appropriate variables to be able to connect to the server.
|
|
||||||
address->sin_family = name->h_addrtype;
|
|
||||||
memcpy(&address->sin_addr.s_addr, name->h_addr_list[0], name->h_length);
|
|
||||||
address->sin_port = htons(port);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// Platform independent version of getaddrinfo()
|
|
||||||
// Given a hostname:port, produce an addrinfo struct
|
|
||||||
static int GetAddrInfo(const char* hostname, int port,
|
|
||||||
struct addrinfo** address) {
|
|
||||||
#if defined(__linux__)
|
|
||||||
char port_str[40];
|
|
||||||
snprintf(port_str, 40, "%d", port);
|
|
||||||
return getaddrinfo(hostname, port_str, nullptr, address);
|
|
||||||
#else
|
|
||||||
return GetAddrInfoNonLinux(hostname, port, address);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Set up a connection to a ScrollView on hostname:port.
|
// Set up a connection to a ScrollView on hostname:port.
|
||||||
SVNetwork::SVNetwork(const char* hostname, int port) {
|
SVNetwork::SVNetwork(const char* hostname, int port) {
|
||||||
msg_buffer_in_ = new char[kMaxMsgSize + 1];
|
msg_buffer_in_ = new char[kMaxMsgSize + 1];
|
||||||
@ -390,10 +336,23 @@ SVNetwork::SVNetwork(const char* hostname, int port) {
|
|||||||
buffer_ptr_ = nullptr;
|
buffer_ptr_ = nullptr;
|
||||||
|
|
||||||
struct addrinfo *addr_info = nullptr;
|
struct addrinfo *addr_info = nullptr;
|
||||||
|
char port_str[40];
|
||||||
|
snprintf(port_str, 40, "%d", port);
|
||||||
|
#ifdef _WIN32
|
||||||
|
// Initialize Winsock
|
||||||
|
WSADATA wsaData;
|
||||||
|
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
|
||||||
|
if (iResult != 0) {
|
||||||
|
std::cerr << "WSAStartup failed: " << iResult << std::endl;
|
||||||
|
}
|
||||||
|
#endif // _WIN32
|
||||||
|
|
||||||
if (GetAddrInfo(hostname, port, &addr_info) != 0) {
|
if (getaddrinfo(hostname, port_str, nullptr, &addr_info) != 0) {
|
||||||
std::cerr << "Error resolving name for ScrollView host "
|
std::cerr << "Error resolving name for ScrollView host "
|
||||||
<< std::string(hostname) << ":" << port << std::endl;
|
<< std::string(hostname) << ":" << port << std::endl;
|
||||||
|
#ifdef _WIN32
|
||||||
|
WSACleanup();
|
||||||
|
#endif // _WIN32
|
||||||
}
|
}
|
||||||
|
|
||||||
stream_ = socket(addr_info->ai_family, addr_info->ai_socktype,
|
stream_ = socket(addr_info->ai_family, addr_info->ai_socktype,
|
||||||
@ -442,7 +401,10 @@ SVNetwork::SVNetwork(const char* hostname, int port) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TessFreeAddrInfo(addr_info);
|
#ifdef _WIN32
|
||||||
|
// WSACleanup(); // This cause ScrollView windows is not displayed
|
||||||
|
#endif // _WIN32
|
||||||
|
freeaddrinfo(addr_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
SVNetwork::~SVNetwork() {
|
SVNetwork::~SVNetwork() {
|
||||||
|
Loading…
Reference in New Issue
Block a user