首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分割故障发生在htonl中

分割故障发生在htonl中
EN

Stack Overflow用户
提问于 2018-05-25 20:39:42
回答 1查看 481关注 0票数 2
代码语言:javascript
复制
// something    
proxyRequest(setRequestFormat(request), respondBuffer, gethostbyname(hostname.c_str()));
// something

int proxyRequest(string request, char buffer[], struct hostent* host){
        int sockfd;
        struct sockaddr_in their_addr;
        if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1){
            perror("Socket generating failed");
            return -1;
        }
        their_addr.sin_family = AF_INET;
        their_addr.sin_port = htons(SERVERPORT);
        their_addr.sin_addr.s_addr = htonl(((struct in_addr*)host->h_addr_list[0])->s_addr); // Here is where segmentation fault occurs
        if(connect(sockfd, (struct sockaddr*)&their_addr, sizeof(struct sockaddr)) == -1){
            perror("Connection failed");
            return -1;
        }
        cout << request.c_str() << endl;
        write(sockfd, request.c_str(), BUFSIZE);
        read(sockfd, buffer, BUFSIZE);
        cout << buffer << endl;
        close(sockfd);
        return 0;
    }

你好。我在做一个基本的代理服务器。我对Cpp套接字编程很陌生,所以我很难理解许多与套接字编程相关的结构,比如in_addr。

就像我说的,分割错误就发生在这条线上。我想这一定是因为语法的原因。

their_addr.sin_addr.s_addr =htonl(struct in_addr*)host->h_addr_list)->s_addr);

这不是因为h_addr_list。我已经检查过它不会产生分割错误。

我如何纠正这个语法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-25 20:46:17

htonl是一个非常简单的宏,不会导致分段错误。当计算参数时,问题就会发生。

这不是因为h_addr_list[0]。我已经检查过它不会产生分割错误。

这是一个好的开始,但仅仅得出分段故障发生在其他地方是不够的。在应用[0]之后,还有一件事是将其内容转换为struct in_addr*,然后取消引用。您必须确保h_addr_list[0]指向有效的struct in_addr*

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50536568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档