У меня самая странная проблема, вызывающая у меня головную боль. Рассмотрим следующий код:
// 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. Когда я отлаживаю программу и проверяю receive_socket, она кажется просто искаженным дерьмом. Я поставил точку останова на строке 'std :: map'. Когда я вхожу в каждую строку вышеуказанного кода, курсор отладки переходит прямо из строки «unsigned short port» в первую строку «local_address.sin», хотя я использую шаг в (F11), он не останавливается строки struct, int, char или SOCKET, они прыгают прямо над ними.
В этот момент я наводю указатель мыши на local_address, from_address, результат, буфер и receive_socket. Они все полны искаженного дерьма. Это потому, что я еще не определил эти переменные? Я также заметил, что когда я достигаю нижней части приведенного выше кода, local_address.sin_port устанавливается в 19992, но это должно быть 6222?
Редактировать: вот мой код привязки, который не выполняется, потому что утверждение if верно:
if(bind( receive_socket, (SOCKADDR*) &local_address, sizeof(local_address)) == SOCKET_ERROR)
{
closesocket(receive_socket);
return 1;
}