【问题标题】:sockaddr_in not found in XCode 6 (on OS X 10.10 Yosemite)在 XCode 6 中找不到 sockaddr_in(在 OS X 10.10 Yosemite 上)
【发布时间】:2016-01-24 20:56:37
【问题描述】:

我正在尝试从目标 c 应用程序发送 UDP 数据包。从 OS X 10.6 到 Yosemite 出现之前,它一直运行良好。现在我收到“未知类型名称'sockaddr_in'”错误。

我的代码:

#import <sys/socket.h>
-(void)sendUdpPacket:(unsigned int) udp_address port:(unsigned short)port data:(const char*)data dataSize:(long)dataSize
{
    int handle = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );

    if ( handle <= -1 )
    {
        return;
    }

    sockaddr_in address;
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = htonl( udp_address );

    address.sin_port = htons( port );
    if ( bind( handle, (const sockaddr*) &address, sizeof(sockaddr_in) ) < -1 )
    {
        printf( "-----------------------failed to bind socket\n " );
        return;
    }
    int nonBlocking = 1;
    if ( fcntl( handle, F_SETFL, O_NONBLOCK, nonBlocking ) == -1 )
    {
        printf( "----------------------failed to set non-blocking socket for %d\n", port );
        return;
    }

    int sent_bytes = sendto( handle, data, dataSize, 0, (sockaddr*)&address, sizeof(sockaddr_in) );
    close(handle);
}

现在我遇到了无法找到IPROTO_UDP or sockaddr_in的错误

有人遇到过这个问题吗?

编辑:没有意识到 括号中的内容没有显示

【问题讨论】:

  • 您是否还安装了 Xcode 命令行工具?如果没有,/usr/include 等中可能没有头文件。尝试运行xcode-select --install
  • 显示所有包含文件。
  • @NedDeily 是的,我安装了 CL 工具,我尝试运行该命令以防万一,但运气不好。

标签: objective-c macos sockets xcode6 osx-yosemite


【解决方案1】:

请参阅inet(4) man page。你必须:

#include <sys/types.h>
#include <netinet/in.h>

一般来说,socket 接口是通用的。它可以与不同的地址族一起使用。 struct sockaddr 是一种通用形式,而sockaddr_in 是特定于 IPv4 的。对于 IPv6 地址,您可以使用 sockaddr_in6。对于 Unix 域套接字,您将使用 sockaddr_un。等等。您需要查阅手册页以了解要使用的套接字类型(例如inet6(4)unix(4) 等)。

【讨论】:

    【解决方案2】:

    Xcode 6 需要完整的数据类型定义。不是“sockaddr_in”而是“struct sockaddr_in”。相同的“const sockaddr*”必须是“const struct sockaddr*”。

    【讨论】:

      猜你喜欢
      • 2016-05-16
      • 2015-01-22
      • 2014-11-10
      • 2016-07-23
      • 2015-01-14
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      相关资源
      最近更新 更多