c - connect()不返回

时间:2018-03-21 22:45:07

标签: c sockets client

我正在尝试构建一个向网站发送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)

这可能是防火墙问题吗?如果是,我该如何解决?

1 个答案:

答案 0 :(得分:0)

我应该在第80行,而不是8080,在行:

serveraddr.sin_port = htons(8080); // no
serveraddr.sin_port = htons(80); // yes

感谢您的帮助。