recvfrom:警告:从'ssize_t'转换为'size_t'可能会改变结果的符号

Sam*_*Sam 0 c

如何修复gcc(Debian 4.9.2-10)4.9.2编译器警告

警告:从'ssize_t'转换为'size_t'可能会改变结果的符号[-Wsign-conversion] recv_len = recvfrom(my_socket,*buf,MESSAGE_MAX_LEN,0,(struct sockaddr*)&remote_addr,&addr_len);

码:

int my_socket;
struct sockaddr_storage remote_addr;
socklen_t addr_len = sizeof(remote_addr);

void
socket_listen(
        int (*callback )(),
        char ** buf)
{
  size_t recv_len;
  ...
  *buf = malloc(MESSAGE_MAX_LEN);
  recv_len = recvfrom(my_socket, *buf, MESSAGE_MAX_LEN, 0, (struct sockaddr *)&remote_addr, &addr_len);
  ...
}
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 5

显而易见的解决方法:使用正确的类型,当然:

const ssize_t recv_len = recvfrom(...);
Run Code Online (Sandbox Code Playgroud)

它已签名,因为它需要能够返回负值(-1)以指示错误,请参见手册页:

这些调用返回接收的字节数,如果发生错误则返回-1.当对等体执行有序关闭时,返回值将为0.