두통을 유발하는 가장 이상한 문제가 있습니다. 다음 코드를 고려하십시오winsock2에서 C++로 소켓을 생성 할 때 문제가 발생했습니다.
// 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'줄에 중단 점을 넣었다. 위 코드의 각 줄에 들어가면 디버그 커서가 '부호없는 짧은 포트'줄에서 첫 번째 'local_address.sin'줄로 바로 이동합니다. (F11)로 단계를 사용하고 있어도 멈추지 않습니다. struct, int, char 또는 SOCKET 선을 넘으면 직선으로 점프합니다.
이 시점에서 나는 local_address, from_address, result, buffer 및 receive_socket에 마우스를 올려 놓습니다. 그들은 모두 깨진 쓰레기로 가득 차 있습니다. 아직이 변수들을 정의하지 않았기 때문입니까? 또한 위 코드의 맨 아래에 도달하면 local_address.sin_port가 19992로 설정되었지만 6222 여야합니다.
편집 :
if(bind(receive_socket, (SOCKADDR*) &local_address, sizeof(local_address)) == SOCKET_ERROR)
{
closesocket(receive_socket);
return 1;
}
어떤 명령으로도 변환되지 않으므로이 줄로 점프합니다. –