繁体   English   中英

使用GCC编译器的UDP recvfrom警告

[英]UDP recvfrom warning with gcc compiler

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

警告:将'int *'传递给类型'socklen_t *'(又名'unsigned int *')的参数会在指针之间转换为具有不同符号[-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社区。

  1. 为什么会出现此警告?
  2. 我该如何摆脱呢?

它要我使用socklen_t *

正确。

为什么会出现此警告?

因为您没有使用socklen_t

我该如何摆脱呢?

声明slensocklen_t

为什么会出现此警告?

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

我该如何摆脱呢?

传递正确类型的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM