我在gcc编译器中不理解我的警告。
警告是:warning: pointer targets in passing argument 6 of ‘recvfrom’ differ in signedness
我不知道,问题出在哪里,我没有使用signed and unsigned
值。
问题在线:
recvfrom(server_socket, inputbuffer, maxLenght, 0, (struct sockaddr*) remote_addr, &server_addr_len);
我试过了:
recvfrom(server_socket, inputbuffer, maxLenght, 0, (unsigned int) remote_addr, &server_addr_len);
但它并没有帮助我。感谢您的建议和解释。
答案 0 :(得分:5)
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
recvfrom()
期望socklen_t
为第6个参数。您可能会传递int
。
所以如此定义server_addr_len
:
socklen_t server_addr_len;
答案 1 :(得分:2)
请参阅recvfrom()
的{{3}}。
它说,函数原型是
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
第6个参数是socklen_t *addrlen
。因此,在从应用程序调用{{1}}时,您必须像
recvfrom()
SideNotes:
1.以某种方式定义变量,使它们不需要socklen_t server_addr_len = 0;
struct sockaddr * remote_addr = NULL;
ssize_t retval = 0;
.
.
retval = recvfrom(server_socket, inputbuffer, maxLenght, 0, remote_addr, &server_addr_len);
。好的做法。
2。检查cast
[或者对于这种情况,任何库调用]的返回值是否成功。
功能
答案 2 :(得分:1)
只需将server_addr_len
声明为socklen_t
socklen_t server_addr_len;
因为recvfrom
函数签名是
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);