【问题标题】:UDP recvfrom warning with gcc compiler使用 gcc 编译器的 UDP recvfrom 警告
【发布时间】:2015-04-17 02:09:51
【问题描述】:

编译我的client - server UDP socket 模拟时,我收到以下warning

警告:将“int *”传递给“socklen_t *”类型的参数(又名 '无符号整数 *') 在指向具有不同符号的整数类型的指针之间转换 [-Wpointer-sign]

这是相关代码:

#define BUFLEN 2048
struct sockaddr_in myaddr, remaddr;
int fd, recvlen, slen=sizeof(remaddr);
...
char response[BUFLEN];
recvlen = recvfrom(fd, response, BUFLEN - 1, 0, (struct sockaddr *)&remaddr, &slen);

我一直在参考罗格斯大学的教程。我很清楚为什么会出现这个警告(它希望我使用socklen_t *),但我想问问 SO 社区。​​p>

  1. 为什么会出现此警告?
  2. 我怎样才能摆脱它?

【问题讨论】:

    标签: c sockets udp gcc-warning recvfrom


    【解决方案1】:

    为什么会出现这个警告?

    出现警告是因为socklen_t 是无符号类型,而int 是有符号类型(如诊断所示)。因此,原则上,recvfrom() 对指向值的解释可能与调用者对它的解释不同。实际上,只要使用地址 struct 的正确长度值,GCC 编译的代码就不会发生这种差异,但 GCC 无法在编译时检查。

    我怎样才能摆脱它?

    传递正确类型的参数。

    【讨论】:

      【解决方案2】:

      它要我使用socklen_t *

      正确。

      为什么会出现这个警告?

      因为你没有使用socklen_t

      我怎样才能摆脱它?

      slen 声明为socklen_t

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        相关资源
        最近更新 更多