C++ SSL支持IRC套接字
我有个小问题。我喜欢向这个IRC客户端添加SSL支持,但我不知道如何开始。有人有什么建议吗C++ SSL支持IRC套接字,c++,sockets,ssl,openssl,irc,C++,Sockets,Ssl,Openssl,Irc,我有个小问题。我喜欢向这个IRC客户端添加SSL支持,但我不知道如何开始。有人有什么建议吗 #include <cstring> #include <fcntl.h> #include "IRCSocket.h" #define MAXDATASIZE 4096 bool IRCSocket::Init() { #ifdef _WIN32 WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &
#include <cstring>
#include <fcntl.h>
#include "IRCSocket.h"
#define MAXDATASIZE 4096
bool IRCSocket::Init()
{
#ifdef _WIN32
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData))
{
std::cout << "Unable to initialize Winsock." << std::endl;
return false;
}
#endif
if ((_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
std::cout << "Socket error." << std::endl;
#ifdef _WIN32
WSACleanup();
#endif
return false;
}
int on = 1;
if (setsockopt(_socket, SOL_SOCKET, SO_REUSEADDR, (char const*)&on, sizeof(on)) == -1)
{
std::cout << "Invalid socket." << std::endl;
#ifdef _WIN32
WSACleanup();
#endif
return false;
}
#ifdef _WIN32
u_long mode = 0;
ioctlsocket(_socket, FIONBIO, &mode);
#else
fcntl(_socket, F_SETFL, O_NONBLOCK);
fcntl(_socket, F_SETFL, O_ASYNC);
#endif
return true;
}
bool IRCSocket::Connect(char const* host, int port)
{
hostent* he;
if (!(he = gethostbyname(host)))
{
std::cout << "Could not resolve host: " << host << std::endl;
#ifdef _WIN32
WSACleanup();
#endif
return false;
}
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr = *((const in_addr*)he->h_addr);
memset(&(addr.sin_zero), '\0', 8);
if (connect(_socket, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
{
std::cout << "Could not connect to: " << host << std::endl;
closesocket(_socket);
return false;
}
_connected = true;
return true;
}
void IRCSocket::Disconnect()
{
if (_connected)
{
#ifdef _WIN32
shutdown(_socket, 2);
#endif
closesocket(_socket);
_connected = false;
}
}
bool IRCSocket::SendData(char const* data)
{
if (_connected)
if (send(_socket, data, strlen(data), 0) == -1)
return false;
return true;
}
std::string IRCSocket::ReceiveData()
{
char buffer[MAXDATASIZE];
memset(buffer, 0, MAXDATASIZE);
int bytes = recv(_socket, buffer, MAXDATASIZE - 1, 0);
if (bytes > 0)
return std::string(buffer);
else
Disconnect();
return "";
}
#包括
#包括
#包括“IRCSocket.h”
#定义MAXDATASIZE 4096
bool-IRCSocket::Init()
{
#ifdef_WIN32
WSADATA WSADATA;
if(WSAStartup(MAKEWORD(2,2)和wsaData))
{
据我所知,C中的SSL是***中的一个难题。你不能使用openSSL=>?