У меня самая странная проблема, вызывающая у меня головные боли. Рассмотрим следующий код:Проблема создания сокета с C++ в winsock2
// Create and bind socket
std::map<Connection, bool> clients;
unsigned short port=6222;
struct sockaddr_in local_address, from_address;
int result;
char buffer[10000];
SOCKET receive_socket;
local_address.sin_family = AF_INET;
local_address.sin_addr.s_addr = INADDR_ANY;
local_address.sin_port = htons(port);
receive_socket = socket(AF_INET,SOCK_DGRAM,0);
То, что происходит receive_socket не является обязательным, я получаю SOCKET_ERROR. Когда я отлаживаю программу и проверяю get_socket, это, похоже, просто искалеченное дерьмо. Я поставил точку останова на строке «std :: map». Когда я вхожу в каждую строку вышеуказанного кода, курсор отладки перескакивает прямо из строки «unsigned short port» в первую строку «local_address.sin», хотя я использую шаг в (F11), он не останавливается на struct, int, char или SOCKET, он прыгает прямо над ними.
В этот момент я наводил указатель мыши на local_address, from_address, result, buffer и receive_socket. Все они полны искаженного дерьма. Это потому, что я еще не определил эти переменные? Я также заметил, что когда я добираюсь до нижней части вышеуказанного кода, local_address.sin_port установлен в 19992, но он должен быть 6222?
Edit: вот мой обязательный код, который не удается, потому что если утверждение верно:
if(bind(receive_socket, (SOCKADDR*) &local_address, sizeof(local_address)) == SOCKET_ERROR)
{
closesocket(receive_socket);
return 1;
}
Это прыгает через эти линии, потому что они не переводят никаких команд. –