24 #include <citrusleaf/cf_clock.h>
28 #if defined(__linux__) || defined(__APPLE__)
30 #include <arpa/inet.h>
31 #include <netinet/in.h>
32 #include <sys/socket.h>
35 #define as_socket_data_t void
36 #define as_socket_size_t size_t
37 #define as_close(fd) (close(fd))
40 #if defined(__APPLE__)
41 #define MSG_NOSIGNAL SO_NOSIGPIPE
44 #if defined(CF_WINDOWS)
48 #define as_socket_data_t char
49 #define as_socket_size_t int
50 #define as_close(fd) (closesocket(fd))
52 #define MSG_DONTWAIT 0
53 #define MSG_NOSIGNAL 0
55 #define SHUT_RDWR SD_BOTH
79 #if defined(__linux__) || defined(__APPLE__)
85 static inline uint64_t
86 as_socket_deadline(uint32_t timeout_ms)
88 return (timeout_ms && timeout_ms <= INT32_MAX)? cf_getms() + timeout_ms : 0;
96 as_socket_write_forever(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len);
104 as_socket_write_limit(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint64_t deadline);
112 as_socket_write_deadline(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint64_t deadline)
115 return as_socket_write_limit(err, fd, buf, buf_len, deadline);
118 return as_socket_write_forever(err, fd, buf, buf_len);
128 as_socket_write_timeout(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint32_t timeout_ms)
130 if (timeout_ms && timeout_ms <= INT32_MAX) {
131 return as_socket_write_limit(err, fd, buf, buf_len, cf_getms() + timeout_ms);
134 return as_socket_write_forever(err, fd, buf, buf_len);
143 as_socket_read_forever(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len);
151 as_socket_read_limit(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint64_t deadline);
159 as_socket_read_deadline(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint64_t deadline)
162 return as_socket_read_limit(err, fd, buf, buf_len, deadline);
165 return as_socket_read_forever(err, fd, buf, buf_len);
175 as_socket_read_timeout(
as_error* err,
int fd, uint8_t *buf,
size_t buf_len, uint32_t timeout_ms)
177 if (timeout_ms && timeout_ms <= INT32_MAX) {
178 return as_socket_read_limit(err, fd, buf, buf_len, cf_getms() + timeout_ms);
181 return as_socket_read_forever(err, fd, buf, buf_len);
190 as_socket_address_name(
struct sockaddr_in* address,
char* name)
192 inet_ntop(AF_INET, &(address->sin_addr), name, INET_ADDRSTRLEN);