使用gcc编译器发出UDP recvfrom警告

时间:2015-04-17 02:09:52

标签: c sockets udp gcc-warning recvfrom

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

  

警告:传递' 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. 我该怎样摆脱它?

2 个答案:

答案 0 :(得分:1)

  

它要我使用socklen_t *

正确。

  

为什么会出现此警告?

因为您没有使用socklen_t

  

我怎样摆脱它?

slen声明为socklen_t

答案 1 :(得分:1)

  

为什么会出现此警告?

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

  

我怎样摆脱它?

传递正确类型的参数。