我正在尝试构建一个向网站发送html请求消息的c客户端,然后读取响应。不幸的是,我的connect()语句没有返回。
是的,我看到了这个答案:connect() does not return
但是,我不想将套接字设置为非阻塞,然后继续执行select()直到我得到响应,因为我一次只处理一个请求。
int main() {
struct hostent *hp;
struct sockaddr_in serveraddr;
mySocket = socket(AF_INET, SOCK_STREAM, 0);
hp = gethostbyname("firefox.com"));
bzero((char *) &serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
bcopy((char *)hp->h_addr_list[0], (char *)&serveraddr.sin_addr.s_addr, hp->h_length);
serveraddr.sin_port = htons(8080); // works up till here
connect(mySocket, (SA *) &serveraddr, sizeof(serveraddr)); // never returns
return 0;
}
我连接正确吗?我已经摆脱了上面代码中的错误检查。
这是终端
中“lsof -Pnl + M -i4”的输出COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
proxy 8321 1000 3u IPv4 51542 0t0 TCP 10.0.2.15:42708->63.245.213.17:8080 (SYN_SENT)
这可能是防火墙问题吗?如果是,我该如何解决?
答案 0 :(得分:0)
我应该在第80行,而不是8080,在行:
serveraddr.sin_port = htons(8080); // no
serveraddr.sin_port = htons(80); // yes
感谢您的帮助。