9 #include <sys/socket.h>
11 #include "aros_compat.h"
15 int aros_getnameinfo(const struct sockaddr
*sa
, socklen_t salen
,
16 char *host
, size_t hostlen
,
17 char *serv
, size_t servlen
, int flags
)
19 struct sockaddr_in
*sin
= (struct sockaddr_in
*)sa
;
22 snprintf(host
, hostlen
, Inet_NtoA(sin
->sin_addr
.s_addr
));
28 int aros_getaddrinfo(const char *node
, const char*service
,
29 const struct addrinfo
*hints
,
30 struct addrinfo
**res
)
32 struct sockaddr_in
*sin
;
34 sin
= malloc(sizeof(struct sockaddr_in
));
35 sin
->sin_len
= sizeof(struct sockaddr_in
);
36 sin
->sin_family
=AF_INET
;
38 /* Some error checking would be nice */
39 sin
->sin_addr
.s_addr
= inet_addr(node
);
43 sin
->sin_port
=htons(atoi(service
));
46 *res
= malloc(sizeof(struct addrinfo
));
48 (*res
)->ai_family
= AF_INET
;
49 (*res
)->ai_addrlen
= sizeof(struct sockaddr_in
);
50 (*res
)->ai_addr
= (struct sockaddr
*)sin
;
55 void aros_freeaddrinfo(struct addrinfo
*res
)
61 int aros_inet_pton(int af
, char *src
, void *dst
)
63 printf("No inet_pton yet");
68 /* unix device numbers dont really make much sense on aros ... */
78 struct Library
* SocketBase
= NULL
;
80 void aros_init_socket(void)
82 if (!(SocketBase
= OpenLibrary("bsdsocket.library", 4))) {
83 printf("NoTCP/IP Stack available");
88 int aros_poll(struct pollfd
*fds
, unsigned int nfds
, int timo
)
90 struct timeval timeout
, *toptr
;
91 fd_set ifds
, ofds
, efds
, *ip
, *op
;
92 unsigned int i
, maxfd
= 0;
95 // Set up the file-descriptor sets in ifds, ofds and efds.
99 for (i
= 0, op
= ip
= 0; i
< nfds
; ++i
)
102 if(fds
[i
].events
& (POLLIN
|POLLPRI
))
105 FD_SET(fds
[i
].fd
, ip
);
107 if(fds
[i
].events
& POLLOUT
)
110 FD_SET(fds
[i
].fd
, op
);
112 FD_SET(fds
[i
].fd
, &efds
);
113 if (fds
[i
].fd
> maxfd
) {
118 // Set up the timeval structure for the timeout parameter
126 timeout
.tv_sec
= timo
/ 1000;
127 timeout
.tv_usec
= (timo
- timeout
.tv_sec
* 1000) * 1000;
130 rc
= WaitSelect(maxfd
+ 1, ip
, op
, &efds
, toptr
, NULL
);
137 for (i
= 0; i
< nfds
; ++i
)
140 if(fds
[i
].events
& (POLLIN
|POLLPRI
) && FD_ISSET(fd
, &ifds
))
141 fds
[i
].revents
|= POLLIN
;
142 if(fds
[i
].events
& POLLOUT
&& FD_ISSET(fd
, &ofds
))
143 fds
[i
].revents
|= POLLOUT
;
144 if(FD_ISSET(fd
, &efds
)) // Some error was detected ... should be some way to know.
145 fds
[i
].revents
|= POLLHUP
;