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
|