hello-world-cpp/task_5/socket_up.cpp
2025-01-14 09:49:18 +10:00

86 lines
2.6 KiB
C++

#include "socket_up.h"
#ifdef _WIN32
// // Линковка библиотеки Winsock
// #pragma comment(lib, "ws2_32.lib")
// don't need but I think may shoot
SOCKET SocketUp::config_socket_windows() {
// 1. Инициализация Winsock
WSADATA wsa_data;
if (WSAStartup(MAKEWORD(2, 2), &wsa_data) != 0) {
std::cerr << "WSAStartup failed with error: " << WSAGetLastError() << "\n";
return 1;
}
// 2. Создание сокета
SOCKET listen_socket = socket(AF_INET, SOCK_STREAM, 0);
if (listen_socket == INVALID_SOCKET) {
std::cerr << "Socket creation failed with error: " << WSAGetLastError() << "\n";
WSACleanup();
return 1;
}
// 3. Настройка адреса сокета
sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080); // Порт для привязки
server_addr.sin_addr.s_addr = INADDR_ANY; // Привязка к любому интерфейсу
// 4. Привязка сокета к адресу
if (bind(listen_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == SOCKET_ERROR) {
std::cerr << "Bind failed with error: " << WSAGetLastError() << "\n";
closesocket(listen_socket);
WSACleanup();
return 1;
}
// 5. Перевод сокета в режим прослушивания
if (listen(listen_socket, SOMAXCONN) == SOCKET_ERROR) {
std::cerr << "Listen failed with error: " << WSAGetLastError() << "\n";
closesocket(listen_socket);
WSACleanup();
return 1;
}
std::cout << "Server is listening on port 8080...\n";
return listen_socket;
return 0;
}
#else
int SocketUp::config_socket_unix() {
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket == -1) {
perror("server socket can't be created");
return 1;
}
sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080); // Порт для привязки
server_addr.sin_addr.s_addr = INADDR_ANY; // Привязка к любому интерфейсу
if (bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
perror("Bind failed");
close(server_socket);
return 1;
}
if (listen(server_socket, SOMAXCONN) == -1) {
perror("Listen failed");
close(server_socket);
return 1;
}
std::cout << "Server is listening on port 8080...\n";
return server_socket;
}
#endif