1 #include <aros/symbolsets.h>
2 #include <proto/alib.h>
3 #include <proto/hostlib.h>
5 #include "bsdsocket_intern.h"
7 static const char *ws_functions
[] = {
22 static const char *res_functions
[] = {
28 static int bsdsocket_Init(struct bsdsocketBase
*SocketBase
)
30 APTR HostLibBase
= OpenResource("hostlib.resource");
34 SocketBase
->HostLibBase
= HostLibBase
;
36 SocketBase
->winsock
= HostLib_Open("Ws2_32.dll", NULL
);
37 if (!SocketBase
->winsock
)
40 SocketBase
->resolver
= HostLib_Open("Libs\\Host\\bsdsocket.dll", NULL
);
41 if (!SocketBase
->resolver
)
44 SocketBase
->WSIFace
= (struct WinSockInterface
*)HostLib_GetInterface(SocketBase
->winsock
, ws_functions
, NULL
);
45 if (!SocketBase
->WSIFace
)
47 D(bug("[socket] Failed to obtain winsock interface\n"));
51 SocketBase
->ResIFace
= (struct HostSocketInterface
*)HostLib_GetInterface(SocketBase
->resolver
, res_functions
, NULL
);
52 if (!SocketBase
->ResIFace
)
55 NewList((struct List
*)&SocketBase
->socks
);
58 SocketBase
->ctl
= SocketBase
->ResIFace
->sock_init();
67 static int bsdsocket_Cleanup(struct bsdsocketBase
*SocketBase
)
69 APTR HostLibBase
= SocketBase
->HostLibBase
;
71 D(bug("[socket] Cleanup, HostLibBase is 0x%p\n", HostLibBase
));
75 if (SocketBase
->ResIFace
)
82 res
= SocketBase
->ResIFace
->sock_shutdown(SocketBase
->ctl
);
90 if (SocketBase
->WSIFace
)
91 HostLib_DropInterface((void **)SocketBase
->WSIFace
);
93 if (SocketBase
->winsock
)
94 HostLib_Close(SocketBase
->winsock
, NULL
);
99 ADD2INITLIB(bsdsocket_Init
, 0);
100 ADD2EXPUNGELIB(bsdsocket_Cleanup
, 0);