Я использую компилятор g++ 4.9.2
и написал следующий код, чтобы попробовать мой первый пример с сокетами.Почему я не подключаюсь к серверу?
char *buf = new char[1000];
int iResult;
int main(){
WSADATA wsaData;
SOCKET ConnectSocket = INVALID_SOCKET;
addrinfo hints, *result;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
std::cout << WSAStartup(MAKEWORD(2,2), &wsaData) << std::endl;
iResult = getaddrinfo("173.194.40.231", "80", &hints, &result);
std::cout << iResult;
ConnectSocket = socket(result -> ai_family, result -> ai_socktype, result -> ai_protocol); //1, HERE
connect(ConnectSocket, result->ai_addr, result->ai_addrlen);
}
вопрос, который я получил Segmentation fault
в 1
. Из-за getaddrinfo("173.194.40.231", "80", &hints, &result);
вернулся 11003
, поэтому &result
указал на NULL
. Зачем? Я набрал действительный адрес и порт.
Это было google.com
, и мы можем открыть его в браузере. Не мог бы кто-нибудь помочь мне?
Что говорит ваш отладчик? Где ваши '# include'? Какой результат вы получаете до segfault (если есть)? –
'Проблема, что я получил ошибку сегментации в 1' Первое, что вы должны сделать, никогда не предполагают, что все будет работать. Вы должны проверить свои возвращаемые значения, а не предполагать, что все в порядке. Вы также можете вызвать 'WSAGetLastError', когда это произойдет. – PaulMcKenzie
@LightnessRacesinOrbit Мой отладчик сказал, что я написал в сообщении. Что еще можно сказать? – user3663882