我是新來的unix網絡編程,我試圖編寫一個程序來連接到Google的服務器。但是,使用connect()函數時出現錯誤。 (OS:OS X)連接:在非套接字上的套接字操作
連接錯誤:套接字操作上非插座
我在這工作了4個小時,但我無法找出問題。這裏是我的代碼:
#define SERVPORT 80
int main (int argc, char **argv)
{
int i, sockfd;
struct hostent *host;
struct sockaddr_in serv_addr;
if ((host = gethostbyname(argv[1])) == NULL) {
printf("gethostbyname error\n");
exit(1);
}
for (i = 0; host->h_addr_list[i]; i++) {
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0) == -1)) {
printf("socket error\n");
exit(1);
}
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(SERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr_list[i]);
const char *ip = inet_ntoa(serv_addr.sin_addr);
printf("connect to %s\n", ip);
if (connect(sockfd, (struct sockaddr *) &serv_addr,
sizeof(struct sockaddr)) == -1) {
printf("connect error:%s\n", strerror(errno));
exit(1);
}
}
return 0;
}
'connect'的'socklen_t'值應該是'sizeof(struct sockaddr_in)'。 –
你已經打破了賦值 - 如果。調試器會在大約45秒內向您顯示。修正括號,或者更好地將作業移出「if」。 –