|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/un.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <errno.h>
char *
sock_ntop(const struct sockaddr *sa, socklen_t salen)
{
char portstr[8];
static char str[128]; /* Unix domain is largest */
switch (sa->sa_family) {
case AF_INET: {
struct sockaddr_in *sin = (struct sockaddr_in *) sa;
if ( inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) == NULL)
return(NULL);
if (ntohs(sin->sin_port) != 0) {
snprintf(portstr, sizeof(portstr), ":%d", ntohs(sin->sin_port));
strcat(str, portstr);
}
return(str);
}
default:
snprintf(str, sizeof(str), "sock_ntop: unknown AF_xxx: %d, len %d",
sa->sa_family, salen);
return(str);
}
return (NULL);
} /** end sock_ntop **/
这个函数,我用gcc -c 编译时提示:
sockaddr.c: 在函数 ‘sock_ntop’ 中:
sockaddr.c:340: 警告:比较指针和整数
就是这句: ( inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) == NULL)
这是UNP上的代码,但是如果我给改成:
( ! inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)))
就没有警告了,
这是不是GCC的BUG? |
|