23 #include <sys/types.h>
24 #include <sys/socket.h>
25 #include <netinet/in.h>
27 #define MY_SOCKET_FORMAT "%d"
28 #define MY_SOCKET_FORMAT_VALUE(x) (x.fd)
30 typedef int ndb_native_socket_t;
33 static inline ndb_native_socket_t
53 my_socket_invalidate(&s);
67 static inline int my_socket_errno()
72 static inline void my_socket_set_errno(
int error)
77 static inline ndb_socket_t my_socket_create(
int domain,
int type,
int protocol)
80 s.fd= socket(domain, type, protocol);
87 return recv(s.fd, buf, len, flags);
93 return send(s.fd, buf, len, flags);
96 static inline int my_socket_reuseaddr(
ndb_socket_t s,
int enable)
98 const int on = enable;
99 return setsockopt(s.fd, SOL_SOCKET, SO_REUSEADDR,
100 (
const void*)&on,
sizeof(on));
103 static inline int my_socket_nonblock(
ndb_socket_t s,
int enable)
106 flags = fcntl(s.fd, F_GETFL, 0);
110 #if defined(O_NONBLOCK)
111 #define NONBLOCKFLAG O_NONBLOCK
112 #elif defined(O_NDELAY)
113 #define NONBLOCKFLAG O_NDELAY
117 flags |= NONBLOCKFLAG;
119 flags &= ~NONBLOCKFLAG;
121 if (fcntl(s.fd, F_SETFL, flags) == -1)
122 return my_socket_errno();
128 static inline int my_bind(
ndb_socket_t s,
const struct sockaddr *my_addr,
129 SOCKET_SIZE_TYPE len)
131 return bind(s.fd, my_addr, len);
134 static inline int my_bind_inet(
ndb_socket_t s,
const struct sockaddr_in *my_addr)
136 return bind(s.fd, (
struct sockaddr*)my_addr,
sizeof(
struct sockaddr_in));
139 static inline int my_socket_get_port(
ndb_socket_t s,
unsigned short *port)
141 struct sockaddr_in servaddr;
142 SOCKET_SIZE_TYPE sock_len =
sizeof(servaddr);
143 if(getsockname(s.fd, (
struct sockaddr*)&servaddr, &sock_len) < 0) {
147 *port= ntohs(servaddr.sin_port);
151 static inline int my_listen(
ndb_socket_t s,
int backlog)
153 return listen(s.fd, backlog);
158 SOCKET_SIZE_TYPE *addrlen)
161 r.fd= accept(s.fd, addr, addrlen);
165 static inline int my_connect_inet(
ndb_socket_t s,
const struct sockaddr_in *addr)
167 return connect(s.fd, (
const struct sockaddr*)addr,
168 sizeof(
struct sockaddr_in));
173 void *optval, SOCKET_SIZE_TYPE *optlen)
175 return getsockopt(s.fd, level, optname, optval, optlen);
180 void *optval, SOCKET_SIZE_TYPE optlen)
182 return setsockopt(s.fd, level, optname, optval, optlen);
185 static inline int my_socket_connect_address(
ndb_socket_t s,
struct in_addr *a)
187 struct sockaddr_in addr;
188 SOCKET_SIZE_TYPE addrlen=
sizeof(addr);
189 if(getpeername(s.fd, (
struct sockaddr*)&addr, &addrlen))
190 return my_socket_errno();
196 static inline int my_getpeername(
ndb_socket_t s,
struct sockaddr *a, SOCKET_SIZE_TYPE *addrlen)
198 if(getpeername(s.fd, a, addrlen))
199 return my_socket_errno();
206 return shutdown(s.fd, how);
217 return readv(s.fd, iov, iovcnt);
222 return writev(s.fd, iov, iovcnt);