hello-world-cpp/task_5/socket_up.cpp

86 lines
2.6 KiB
C++
Raw Permalink Normal View History

2025-01-13 02:35:49 +10:00
#include "socket_up.h"
2025-01-13 23:44:26 +00:00
#ifdef _WIN32
2025-01-13 02:35:49 +10:00
// // Линковка библиотеки Winsock
// #pragma comment(lib, "ws2_32.lib")
// don't need but I think may shoot
SOCKET SocketUp::config_socket_windows() {
// 1. Инициализация Winsock
2025-01-14 09:49:18 +10:00
WSADATA wsa_data;
if (WSAStartup(MAKEWORD(2, 2), &wsa_data) != 0) {
2025-01-13 02:35:49 +10:00
std::cerr << "WSAStartup failed with error: " << WSAGetLastError() << "\n";
return 1;
}
// 2. Создание сокета
2025-01-13 23:44:26 +00:00
SOCKET listen_socket = socket(AF_INET, SOCK_STREAM, 0);
if (listen_socket == INVALID_SOCKET) {
2025-01-13 02:35:49 +10:00
std::cerr << "Socket creation failed with error: " << WSAGetLastError() << "\n";
WSACleanup();
return 1;
}
// 3. Настройка адреса сокета
2025-01-14 09:49:18 +10:00
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; // Привязка к любому интерфейсу
2025-01-13 02:35:49 +10:00
// 4. Привязка сокета к адресу
2025-01-14 09:49:18 +10:00
if (bind(listen_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == SOCKET_ERROR) {
2025-01-13 02:35:49 +10:00
std::cerr << "Bind failed with error: " << WSAGetLastError() << "\n";
2025-01-13 23:44:26 +00:00
closesocket(listen_socket);
2025-01-13 02:35:49 +10:00
WSACleanup();
return 1;
}
// 5. Перевод сокета в режим прослушивания
2025-01-13 23:44:26 +00:00
if (listen(listen_socket, SOMAXCONN) == SOCKET_ERROR) {
2025-01-13 02:35:49 +10:00
std::cerr << "Listen failed with error: " << WSAGetLastError() << "\n";
2025-01-13 23:44:26 +00:00
closesocket(listen_socket);
2025-01-13 02:35:49 +10:00
WSACleanup();
return 1;
}
std::cout << "Server is listening on port 8080...\n";
2025-01-13 23:44:26 +00:00
return listen_socket;
2025-01-13 04:58:58 +10:00
return 0;
}
2025-01-13 23:44:26 +00:00
#else
2025-01-13 02:35:49 +10:00
2025-01-13 04:58:58 +10:00
int SocketUp::config_socket_unix() {
2025-01-13 23:44:26 +00:00
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket == -1) {
perror("server socket can't be created");
return 1;
}
2025-01-14 09:49:18 +10:00
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; // Привязка к любому интерфейсу
2025-01-13 23:44:26 +00:00
2025-01-14 09:49:18 +10:00
if (bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
2025-01-13 23:44:26 +00:00
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;
2025-01-13 02:35:49 +10:00
}
2025-01-13 23:44:26 +00:00
#endif