summaryrefslogtreecommitdiffstats
path: root/src/include/socket-utils.h
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2001-08-30 00:31:06 +0000
committerKen Raeburn <raeburn@mit.edu>2001-08-30 00:31:06 +0000
commit3f4c9c70f544c562e6df2cb5b62507ffa96bebcb (patch)
tree0c7e7e79a7b269fd922e8b072a1a1f31c7bd5f9f /src/include/socket-utils.h
parent54e71619fcf59c183809b36a44fb240ff26e6174 (diff)
downloadkrb5-3f4c9c70f544c562e6df2cb5b62507ffa96bebcb.tar.gz
krb5-3f4c9c70f544c562e6df2cb5b62507ffa96bebcb.tar.xz
krb5-3f4c9c70f544c562e6df2cb5b62507ffa96bebcb.zip
move socket util definitions (socklen_t, sa2sin, etc) from k5-int to a new file
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@13689 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/include/socket-utils.h')
-rw-r--r--src/include/socket-utils.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/include/socket-utils.h b/src/include/socket-utils.h
new file mode 100644
index 0000000000..d592f95979
--- /dev/null
+++ b/src/include/socket-utils.h
@@ -0,0 +1,72 @@
+#ifndef SOCKET_UTILS_H
+#define SOCKET_UTILS_H
+
+/* Some useful stuff cross-platform. */
+
+/* for HAVE_SOCKLEN_T, KRB5_USE_INET6, HAVE_SA_LEN */
+#include "krb5/autoconf.h"
+
+/* Either size_t or int or unsigned int is probably right. Under
+ SunOS 4, it looks like int is desired, according to the accept man
+ page. */
+#ifndef HAVE_SOCKLEN_T
+typedef int socklen_t;
+#endif
+
+/* XXX should only be done if sockaddr_storage not found */
+#ifndef KRB5_USE_INET6
+struct krb5int_sockaddr_storage { struct sockaddr_in s; };
+#define sockaddr_storage krb5int_sockaddr_storage
+#endif
+
+#if defined (__GNUC__)
+/* There's a lot of confusion between pointers to different sockaddr
+ types, and pointers with different degrees of indirection, as in
+ the locate_kdc type functions. Use these function to ensure we
+ don't do something silly like cast a "sockaddr **" to a
+ "sockaddr_in *". */
+static __inline__ struct sockaddr_in *sa2sin (struct sockaddr *sa)
+{
+ return (struct sockaddr_in *) sa;
+}
+#ifdef KRB5_USE_INET6xxNotUsed
+static __inline__ struct sockaddr_in6 *sa2sin6 (struct sockaddr *sa)
+{
+ return (struct sockaddr_in6 *) sa;
+}
+#endif
+static __inline__ struct sockaddr *ss2sa (struct sockaddr_storage *ss)
+{
+ return (struct sockaddr *) ss;
+}
+static __inline__ struct sockaddr_in *ss2sin (struct sockaddr_storage *ss)
+{
+ return (struct sockaddr_in *) ss;
+}
+static __inline__ struct sockaddr_in6 *ss2sin6 (struct sockaddr_storage *ss)
+{
+ return (struct sockaddr_in6 *) ss;
+}
+#else
+#define sa2sin(S) ((struct sockaddr_in *)(S))
+#define sa2sin6(S) ((struct sockaddr_in6 *)(S))
+#define ss2sa(S) ((struct sockaddr *)(S))
+#define ss2sin(S) ((struct sockaddr_in *)(S))
+#define ss2sin6(S) ((struct sockaddr_in6 *)(S))
+#endif
+
+#if !defined (socklen)
+/* size_t socklen (struct sockaddr *) */
+/* Should this return socklen_t instead? */
+# ifdef HAVE_SA_LEN
+# define socklen(X) ((X)->sa_len)
+# else
+# ifdef KRB5_USE_INET6
+# define socklen(X) ((X)->sa_family == AF_INET6 ? sizeof (struct sockaddr_in6) : (X)->sa_family == AF_INET ? sizeof (struct sockaddr_in) : sizeof (struct sockaddr))
+# else
+# define socklen(X) ((X)->sa_family == AF_INET ? sizeof (struct sockaddr_in) : sizeof (struct sockaddr))
+# endif
+# endif
+#endif
+
+#endif /* SOCKET_UTILS_H */