On 7/27/22 5:11 PM, Ammar Faizi wrote:
So -D_GNU_SOURCE is the culprit. It seems to be unavoidable as the warn seems to be compiler specific or something. Maybe that _GNU_SOURCE patches the definition of bind().
I did: gcc -E -D_GNU_SOURCE test.c -o xtest.c and examined the xtest.c output. So basically when we use _GNU_SOURCE, sometimes the declaration of bind() is like this: extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) __attribute__ ((__nothrow__ , __leaf__)); With __CONST_SOCKADDR_ARG being a union: typedef union { const struct sockaddr *__restrict __sockaddr__; const struct sockaddr_at *__restrict __sockaddr_at__; const struct sockaddr_ax25 *__restrict __sockaddr_ax25__; const struct sockaddr_dl *__restrict __sockaddr_dl__; const struct sockaddr_eon *__restrict __sockaddr_eon__; const struct sockaddr_in *__restrict __sockaddr_in__; const struct sockaddr_in6 *__restrict __sockaddr_in6__; const struct sockaddr_inarp *__restrict __sockaddr_inarp__; const struct sockaddr_ipx *__restrict __sockaddr_ipx__; const struct sockaddr_iso *__restrict __sockaddr_iso__; const struct sockaddr_ns *__restrict __sockaddr_ns__; const struct sockaddr_un *__restrict __sockaddr_un__; const struct sockaddr_x25 *__restrict __sockaddr_x25__; } __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__)); But not all header file included by the compiler has this union stuff. When it doesn't, it will throw a warning like that. -- Ammar Faizi