我正在使用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
,我们可以在浏览器中打开它。有人帮帮我吗?
答案 0 :(得分:1)
memset(&hints, 0, sizeof(hints));
getaddrinfo()尝试填充提供的现有数据。垃圾数据使该功能混乱。