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 MSG_NOSIGNAL SO_NOSIGPIPE
40 #if defined(CF_WINDOWS)
44 #define as_socket_data_t char
45 #define as_socket_size_t int
46 #define as_close(fd) (closesocket(fd))
48 #define MSG_DONTWAIT 0
49 #define MSG_NOSIGNAL 0
51 #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);
as_status as_socket_start_connect_nb(as_error *err, int fd, struct sockaddr_in *sa)
as_status as_socket_create_and_connect_nb(as_error *err, struct sockaddr_in *sa, int *fd)
as_status as_socket_create_nb(as_error *err, int *fd)