带有 gcc 编译器的 UDP recvfrom 警告

UDP recvfrom warning with gcc compiler

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

warning: passing 'int *' to parameter of type 'socklen_t *' (aka 'unsigned int *') converts between pointers to integer types with different sign [-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. 我怎样才能摆脱它?

it wants me to use socklen_t *

正确。

Why is this warning occuring?

因为您没有使用 socklen_t

How can I get rid of it?

slen 声明为 socklen_t

Why is this warning occuring?

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

How can I get rid of it?

传递正确类型的参数。