首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS模拟器中的Basic套接字编程

iOS模拟器中的Basic套接字编程
EN

Stack Overflow用户
提问于 2012-03-21 06:10:54
回答 1查看 2.1K关注 0票数 0

我正在通过Beej的套接字教程工作。为什么下面对socket 的调用在iPhone模拟器中不起作用?

代码语言:javascript
运行
复制
    int status;
    struct addrinfo hints;
    struct addrinfo *servinfo;
    char ipstr[INET6_ADDRSTRLEN];

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE;

    if ((status = getaddrinfo("www.yahoo.com", 
                              "80", 
                              &hints, 
                              &servinfo)) != 0) {
        fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
        exit(1);
    }

    for(struct addrinfo *p = servinfo; p != NULL; p = p->ai_next) {
        void *addr;
        char *ipver;

        if (p->ai_family == AF_INET) {
            struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
            addr = &(ipv4->sin_addr);
            ipver = "IPv4";
        } else {
            struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
            addr = &(ipv6->sin6_addr);
            ipver = "IPv6";
        }

        inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
        printf("  %s: %s\n", ipver, ipstr);

        int socketfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol);
        if (socketfd)
            printf("errno: %d\n", errno);
    }

    freeaddrinfo(servinfo);

上述代码的输出如下:

代码语言:javascript
运行
复制
  IPv4: 72.30.38.140
  errno: 2
  IPv4: 72.30.2.43
  errno: 2

errno 2是No such file or directory。我不知道该怎么解释。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-22 05:14:04

错误在这一行中:

代码语言:javascript
运行
复制
if (socketfd) {

这应该是:

代码语言:javascript
运行
复制
if (socketfd == -1) {

因为socket()在错误时返回-1,而不是在成功时返回零(如这里提到的:https://stackoverflow.com/a/1879234/22471)

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

https://stackoverflow.com/questions/9799437

复制
相关文章

相似问题

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