57 #include <sys/types.h>
58 #include <sys/socket.h>
59 #include <sys/ioctl.h>
61 #include <netinet/in.h>
62 #include <arpa/inet.h>
67 # include <winsock2.h>
68 # include <ws2tcpip.h>
70 # if defined(IPPROTO_IPV6) || (_WIN32_WINNT >= 0x0501)
84 #if SU_HAVE_BSDSOCK || DOCUMENTATION_ONLY
88 #define INVALID_SOCKET ((su_socket_t)INVALID_SOCKET)
91 #define SOCKET_ERROR SOCKET_ERROR
97 #if SYMBIAN && !defined(MSG_NOSIGNAL)
98 #define MSG_NOSIGNAL (0)
100 #elif SU_HAVE_WINSOCK
106 #define MSG_NOSIGNAL (0)
111 #define SU_MAXHOST (1025)
113 #define SU_MAXSERV (25)
116 #define SU_ADDRSIZE (48)
118 #define SU_SERVSIZE (16)
120 #define SU_SUCCESS su_success
121 #define SU_FAILURE su_failure
127 #if SU_HAVE_BSDSOCK || DOCUMENTATION_ONLY
129 #elif SU_HAVE_WINSOCK
133 #if !SU_HAVE_SOCKADDR_STORAGE
137 #define _SS_MAXSIZE 128
138 #define _SS_ALIGNSIZE (sizeof(int64_t))
139 #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_char) * 2)
140 #define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(u_char) * 2 - \
141 _SS_PAD1SIZE - _SS_ALIGNSIZE)
143 struct sockaddr_storage {
144 #if SU_HAVE_SOCKADDR_SA_LEN
145 unsigned char ss_len;
146 unsigned char ss_family;
148 unsigned short ss_family;
150 char __ss_pad1[_SS_PAD1SIZE];
152 char __ss_pad2[_SS_PAD2SIZE];
158 #ifdef DOCUMENTATION_ONLY
164 #if SU_HAVE_SOCKADDR_SA_LEN
165 #define su_len su_sa.sa_len
167 #define su_len su_array[0]
169 #define su_family su_sa.sa_family
170 #define su_port su_sin.sin_port
179 struct sockaddr_in6 su_sin6;
181 #ifdef DOCUMENTATION_ONLY
184 #define su_scope_id su_array32[6]
190 #if SU_HAVE_BSDSOCK || DOCUMENTATION_ONLY
250 #define SU_IOVECLEN_MAX SIZE_MAX
262 #define SU_IOVECLEN_MAX ULONG_MAX
313 #define su_ioctl ioctl
318 #define su_is_blocking(e) \
319 ((e) == EINPROGRESS || (e) == EAGAIN || (e) == EWOULDBLOCK)
323 SOFIAPUBFUN int su_inet_pton(
int af,
char const *src,
void *dst);
324 SOFIAPUBFUN const char *su_inet_ntop(
int af,
void const *src,
325 char *dst,
size_t size);
327 su_send(
su_socket_t s,
void *buffer,
size_t length,
int flags),
328 su_sendto(
su_socket_t s,
void *buffer,
size_t length,
int flags,
330 su_recv(
su_socket_t s,
void *buffer,
size_t length,
int flags),
331 su_recvfrom(
su_socket_t s,
void *buffer,
size_t length,
int flags,
337 return (
uint16_t)(((s & 255) << 8) | ((s & 0xff00) >> 8));
343 return ((l & 0xff) << 24) | ((l & 0xff00) << 8)
344 | ((l & 0xff0000) >> 8) | ((l & 0xff000000U) >> 24);
347 #define ntohs su_ntohs
348 #define htons su_ntohs
349 #define ntohl su_ntohl
350 #define htonl su_ntohl
353 #define su_inet_pton inet_pton
354 #define su_inet_ntop inet_ntop
355 #define su_send(s,b,l,f) send((s),(b),(l),(f))
356 #define su_sendto(s,b,l,f,a,L) sendto((s),(b),(l),(f),(void const*)(a),(L))
357 #define su_recv(s,b,l,f) recv((s),(b),(l),(f))
358 #define su_recvfrom(s,b,l,f,a,L) recvfrom((s),(b),(l),(f),(void *)(a),(L))
365 #define getuid() (0x505)
369 #define IPPROTO_SCTP (132)
381 #define SU_ADDR(su) \
382 ((su)->su_family == AF_INET ? (void *)&(su)->su_sin.sin_addr : \
383 ((su)->su_family == AF_INET6 ? (void *)&(su)->su_sin6.sin6_addr : \
384 (void *)&(su)->su_sa.sa_data))
386 #define SU_ADDR(su) \
387 ((su)->su_family == AF_INET ? (void *)&(su)->su_sin.sin_addr : \
388 (void *)&(su)->su_sa.sa_data)
397 #define SU_ADDRLEN(su) \
398 ((su)->su_family == AF_INET \
399 ? (socklen_t)sizeof((su)->su_sin.sin_addr) : \
400 ((su)->su_family == AF_INET6 \
401 ? (socklen_t)sizeof((su)->su_sin6.sin6_addr) \
402 : (socklen_t)sizeof((su)->su_sa.sa_data)))
404 #define SU_ADDRLEN(su) \
405 ((su)->su_family == AF_INET \
406 ? (socklen_t)sizeof((su)->su_sin.sin_addr) \
407 : (socklen_t)sizeof((su)->su_sa.sa_data))