【问题标题】:Basic socket programming in iOS simulatoriOS 模拟器中的基本套接字编程
【发布时间】:2012-03-21 06:10:54
【问题描述】:

我正在处理Beej's sockets tutorial为什么下面对socket 的调用在 iPhone 模拟器中不起作用?

    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);

以上代码的输出为:

  IPv4: 72.30.38.140
  errno: 2
  IPv4: 72.30.2.43
  errno: 2

errno 2 是No such file or directory。我不知道如何解释这个。

【问题讨论】:

  • 没有这样的文件或目录。指定路径名的组件不存在,或路径名是空字符串。
  • 上面的代码可以引用什么路径名?
  • 我建议你:1)尝试另一台服务器; 2)尝试调试您的代码以找到一个空字符串(如果存在)。首先,尝试将“www.yahoo.com”分配给一个变量并使用而不是文字

标签: ios sockets unix file-descriptor errno


【解决方案1】:

错误在这一行:

if (socketfd) {

这应该是:

if (socketfd == -1) {

因为socket() 在错误时返回 -1,而不是在成功时返回零(如此处所述:https://stackoverflow.com/a/1879234/22471

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多