summaryrefslogtreecommitdiff
path: root/include/socket_if.h
blob: 82d091ece2138c2dc8593948c3ae81eae4f68f98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#ifndef SOCKETIF_H
#define SOCKETIF_H

/*  Revsision 20220608
 *  - removed obsolete socket_local4() and socket_remote4()
 *  Revision 20210828, Erwin Hoffmann
 *  - added socket_accept4()
 *  Revision 20210226, Erwin Hoffmann
 *  - removed dependency on ipv4socket (loose coupling)
 *  - only single socket_tcp() and
 *  - single socket_udp() function serving both IPv4 + IPv6
 *  Revision 20181125, Erwin Hoffmann
 *  - switched to 'uint_t.h'
 *  - changed 'socket_tcp' --> 'socket_tcp4', 'socket_udp' --> 'socket_udp4'
 *  - added 'socket_ip6optionskill'
 *  - reordered and included backword compatible IPv6 calls
 *  - commented multicast socket declarations
 *  - enlarged usage for ipv4socket -> dual bind IPv4/IPv6
*/

#define __APPLE_USE_RFC_3542 /* MacOS Anycast support */

#include "uint_t.h"

/* IPv4 only */
extern int socket_accept4(int, char[4], uint16 *);
extern int socket_bind4(int, const char[4], uint16);
extern int socket_bind4_reuse(int, const char[4], uint16);
extern int socket_connect4(int, const char[4], uint16);
extern int socket_send4(int, const char *, unsigned int, const char[4], uint16);
extern int socket_broadcast4(int, const char *, unsigned int, uint16);

/* Backward compatibility */
#define socket_local4  socket_local
#define socket_remote4 socket_remote

/* IPv6 only */
extern int socket_bind6(int, const char[16], uint16, uint32);
extern int socket_bind6_reuse(int, const char[16], uint16, uint32);
extern int socket_connect6(int, const char[16], uint16, uint32);
extern int socket_send6(int, const char *, unsigned int, const char[16], uint16, uint32);
extern const char *socket_getifname(uint32);
extern uint32 socket_getifidx(const char *);
extern int socket_ip6optionskill(int);
extern int socket_ip6anycast(int);

/* Common IPv4 & IPv6 */
extern int socket_accept(int, char[16], uint16 *, uint32 *);
extern int socket_bind(int, const char[16], uint16, uint32);
extern int socket_bind_reuse(int, const char[16], uint16, uint32);
extern int socket_connect(int, const char[16], uint16, uint32);
extern int socket_connected(int);
extern int socket_listen(int, int);
extern int socket_local(int, char[16], uint16 *, uint32 *);
extern int socket_recv(int, char *, unsigned int, char[16], uint16 *, uint32 *);
extern int socket_remote(int, char[16], uint16 *, uint32 *);
extern int socket_send(int, const char *, unsigned int, const char[16], uint16, uint32);
extern void socket_tryreservein(int, int);
extern int socket_ipoptionskill(int);
extern int socket_dualstack(int);
extern int socket_nodualstack(int);

/* Backward compatibility */
#define socket_accept6 socket_accept
#define socket_local6  socket_local
#define socket_recv6   socket_recv
#define socket_remote6 socket_remote

/* TCP */
extern int socket_tcp4(void);
extern int socket_tcp6(void);
extern int socket_tcp(void);
extern int socket_tcpnodelay(int);

/* UDP */
extern int socket_udp4(void);
extern int socket_udp6(void);
extern int socket_udp(void);

/*********** For future use ***********************************/
/* enable sending udp packets to the broadcast address */
// extern int socket_broadcast(int);
/* join a multicast group on the given interface */
// extern int socket_mcjoin4(int,char *,char *);
// extern int socket_mcjoin6(int,char *,int);
/* leave a multicast group on the given interface */
// extern int socket_mcleave4(int,char *);
// extern int socket_mcleave6(int,char *);
/* set multicast TTL/hop count for outgoing packets */
// extern int socket_mcttl4(int,char);
// extern int socket_mcttl6(int,char);
/* enable multicast loopback */
// extern int socket_mcloop4(int,char);
// extern int socket_mcloop6(int,char);
/**************************************************************/

#endif