Squid Web Cache master
Loading...
Searching...
No Matches
socket.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2026 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9#ifndef SQUID_COMPAT_SOCKET_H
10#define SQUID_COMPAT_SOCKET_H
11
12#if HAVE_SYS_SOCKET_H
13#include <sys/socket.h>
14#endif
15
17int xaccept(int socketFd, struct sockaddr *sa, socklen_t *saLength);
18
20int xbind(int socketFd, const struct sockaddr *sa, socklen_t saLength);
21
23int xconnect(int socketFd, const struct sockaddr *sa, socklen_t saLength);
24
26int xgetsockopt(int socketFd, int level, int optionName, void * optionValue, socklen_t * optionLength);
27
29int xgetsockname(int socketFd, struct sockaddr * sa, socklen_t * saLength);
30
32int xlisten(int socketFd, int backlog);
33
35ssize_t xrecv(int socketFd, void * buf, size_t bufLength, int flags);
36
38ssize_t xrecvfrom(int socketFd, void * buf, size_t bufLength, int flags, struct sockaddr * from, socklen_t * fromLength);
39
41ssize_t xsend(int socketFd, const void * buf, size_t bufLength, int flags);
42
44ssize_t xsendto(int socketFd, const void * buf, size_t bufLength, int flags, const struct sockaddr * to, socklen_t toLength);
45
47int xsetsockopt(int socketFd, int level, int option, const void * value, socklen_t valueLength);
48
50int xsocket(int domain, int type, int protocol);
51
52// AIX and possibly others lack MSG_DONTWAIT but have a MSG_NONBLOCK equivalent
53#if !defined(MSG_DONTWAIT) && defined(MSG_NONBLOCK)
54#define MSG_DONTWAIT MSG_NONBLOCK
55#endif
56
57// Solaris and possibly others lack MSG_NOSIGNAL optimization
58#ifndef MSG_NOSIGNAL
59#define MSG_NOSIGNAL 0
60#endif
61
62#if !(_SQUID_WINDOWS_ || _SQUID_MINGW_)
63
64inline int
65xaccept(int socketFd, struct sockaddr *sa, socklen_t *saLength)
66{
67 return accept(socketFd, sa, saLength);
68}
69
70inline int
71xbind(int socketFd, const struct sockaddr *sa, socklen_t saLength)
72{
73 return bind(socketFd, sa, saLength);
74}
75
76inline int
77xconnect(int socketFd, const struct sockaddr *sa, socklen_t saLength)
78{
79 return connect(socketFd, sa, saLength);
80}
81
82inline int
83xgetsockname(int socketFd, struct sockaddr * sa, socklen_t * saLength)
84{
85 return getsockname(socketFd, sa, saLength);
86}
87
88inline int
89xlisten(int socketFd, int backlog)
90{
91 return listen(socketFd, backlog);
92}
93
94inline int
95xgetsockopt(int socketFd, int level, int optionName, void * optionValue, socklen_t * optionLength)
96{
97 return getsockopt(socketFd, level, optionName, optionValue, optionLength);
98}
99
100inline ssize_t
101xrecv(int socketFd, void * buf, size_t bufLength, int flags)
102{
103 return recv(socketFd, buf, bufLength, flags);
104}
105
106inline ssize_t
107xrecvfrom(int socketFd, void * buf, size_t bufLength, int flags, struct sockaddr * from, socklen_t * fromLength)
108{
109 return recvfrom(socketFd, buf, bufLength, flags, from, fromLength);
110}
111
112inline ssize_t
113xsend(int socketFd, const void * buf, size_t bufLength, int flags)
114{
115 return send(socketFd, buf, bufLength, flags);
116}
117
118inline ssize_t
119xsendto(int socketFd, const void * buf, size_t bufLength, int flags, const struct sockaddr * to, socklen_t l)
120{
121 return sendto(socketFd, buf, bufLength, flags, to, l);
122}
123
124inline int
125xsetsockopt(int socketFd, int level, int option, const void *value, socklen_t valueLength)
126{
127 return setsockopt(socketFd, level, option, value, valueLength);
128}
129
130inline int
131xsocket(int domain, int type, int protocol)
132{
133 return socket(domain, type, protocol);
134}
135
136#else
137
138static_assert(SOCKET_ERROR == -1);
139
140inline bool
141isValidSocketHandle(intptr_t handle)
142{
143 return handle != intptr_t(INVALID_HANDLE_VALUE);
144}
145
146#endif /* !(_SQUID_WINDOWS_ || _SQUID_MINGW_) */
147
148#endif /* SQUID_COMPAT_SOCKET_H */
int xsocket(int domain, int type, int protocol)
POSIX socket(2) equivalent.
Definition socket.h:131
ssize_t xsendto(int socketFd, const void *buf, size_t bufLength, int flags, const struct sockaddr *to, socklen_t toLength)
POSIX sendto(2) equivalent.
Definition socket.h:119
int xbind(int socketFd, const struct sockaddr *sa, socklen_t saLength)
POSIX bind(2) equivalent.
Definition socket.h:71
ssize_t xrecv(int socketFd, void *buf, size_t bufLength, int flags)
POSIX recv(2) equivalent.
Definition socket.h:101
ssize_t xsend(int socketFd, const void *buf, size_t bufLength, int flags)
POSIX send(2) equivalent.
Definition socket.h:113
ssize_t xrecvfrom(int socketFd, void *buf, size_t bufLength, int flags, struct sockaddr *from, socklen_t *fromLength)
POSIX recvfrom(2) equivalent.
Definition socket.h:107
int xgetsockopt(int socketFd, int level, int optionName, void *optionValue, socklen_t *optionLength)
POSIX getsockopt(2) equivalent.
Definition socket.h:95
int xgetsockname(int socketFd, struct sockaddr *sa, socklen_t *saLength)
POSIX getsockname(2) equivalent.
Definition socket.h:83
int xaccept(int socketFd, struct sockaddr *sa, socklen_t *saLength)
POSIX accept(2) equivalent.
Definition socket.h:65
int xsetsockopt(int socketFd, int level, int option, const void *value, socklen_t valueLength)
POSIX setsockopt(2) equivalent.
Definition socket.h:125
int xconnect(int socketFd, const struct sockaddr *sa, socklen_t saLength)
POSIX connect(2) equivalent.
Definition socket.h:77
int xlisten(int socketFd, int backlog)
POSIX listen(2) equivalent.
Definition socket.h:89
int socklen_t
Definition types.h:137