簡體   English   中英

recvfrom:警告:從“ ssize_t”轉換為“ size_t”可能會改變結果的符號

[英]recvfrom: warning: conversion to ‘size_t’ from ‘ssize_t’ may change the sign of the result

如何修復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);
  ...
}

顯而易見的解決方法:當然,請使用正確的類型:

const ssize_t recv_len = recvfrom(...);

已簽名,因為它需要能夠返回負值(-1)來指示錯誤,請參見手冊頁

這些調用返回接收到的字節數,如果發生錯誤,則返回-1。 當對等方執行有序關閉時,返回值將為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM