20 #include <citrusleaf/cf_clock.h>
24 #if defined(__linux__) || defined(__APPLE__)
26 #include <arpa/inet.h>
27 #include <netinet/in.h>
28 #include <sys/socket.h>
31 #define as_socket_data_t void
32 #define as_socket_size_t size_t
33 #define as_close(fd) (close(fd))
36 #if defined(__APPLE__)
37 #define SOL_TCP IPPROTO_TCP
38 #define MSG_NOSIGNAL 0
41 #if defined(CF_WINDOWS)
45 #define as_socket_data_t char
46 #define as_socket_size_t int
47 #define as_close(fd) (closesocket(fd))
49 #define MSG_DONTWAIT 0
50 #define MSG_NOSIGNAL 0
52 #define SHUT_RDWR SD_BOTH
92 #if defined(__linux__) || defined(__APPLE__)
98 static inline uint64_t
99 as_socket_deadline(uint32_t timeout_ms)
101 return (timeout_ms && timeout_ms <= INT32_MAX)? cf_getms() + timeout_ms : 0;
109 as_socket_write_forever(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len);
117 as_socket_write_limit(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint64_t deadline);
125 as_socket_write_deadline(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint64_t deadline)
128 return as_socket_write_limit(err, fd, buf, buf_len, deadline);
131 return as_socket_write_forever(err, fd, buf, buf_len);
141 as_socket_write_timeout(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint32_t timeout_ms)
143 if (timeout_ms && timeout_ms <= INT32_MAX) {
144 return as_socket_write_limit(err, fd, buf, buf_len, cf_getms() + timeout_ms);
147 return as_socket_write_forever(err, fd, buf, buf_len);
156 as_socket_read_forever(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len);
164 as_socket_read_limit(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint64_t deadline);
172 as_socket_read_deadline(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint64_t deadline)
175 return as_socket_read_limit(err, fd, buf, buf_len, deadline);
178 return as_socket_read_forever(err, fd, buf, buf_len);
188 as_socket_read_timeout(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint32_t timeout_ms)
190 if (timeout_ms && timeout_ms <= INT32_MAX) {
191 return as_socket_read_limit(err, fd, buf, buf_len, cf_getms() + timeout_ms);
194 return as_socket_read_forever(err, fd, buf, buf_len);
203 as_socket_address_name(
struct sockaddr_in* address,
char* name)
205 inet_ntop(AF_INET, &(address->sin_addr), name, INET_ADDRSTRLEN);