7 #include "host_socket.h"
11 static struct SocketController ctl
;
13 static DWORD WINAPI
ResolverThread(struct SocketController
*ctl
)
15 D(printf("[Resolver] Thread started\n"));
19 WaitForSingleObject(ctl
->ResolverEvent
, INFINITE
);
23 case SOCK_CMD_SHUTDOWN
:
24 D(printf("[Resolver] Shutdown requested\n"));
26 CloseHandle(ctl
->ResolverEvent
);
31 KrnCauseIRQ(ctl
->ResolverIRQ
);
35 struct SocketController
* __declspec(dllexport
) __aros
sock_init(void)
37 struct WSAData wsdata
;
40 int state
= WSAStartup(0x0002, &wsdata
);
42 D(printf("[sock_init] WSAStartup reply: %u\n", state
));
43 D(printf("[sock_init] Using WinSock v%u.%u (%s)\n", wsdata
.wVersion
& 0x00FF, wsdata
.wVersion
>> 8, wsdata
.szDescription
));
44 D(printf("[sock_init] Status: %s\n", wsdata
.szSystemStatus
));
56 ctl
.ResolverIRQ
= irq
;
58 ctl
.ResolverEvent
= CreateEvent(NULL
, FALSE
, FALSE
, NULL
);
59 if (ctl
.ResolverEvent
)
63 thread
= CreateThread(NULL
, 0, (LPTHREAD_START_ROUTINE
)ResolverThread
, &ctl
, 0, &id
);
68 ctl
.SocketEvent
= KrnGetIRQObject(ctl
.SocketIRQ
);
71 CloseHandle(ctl
.ResolverEvent
);
74 KrnFreeIRQ(ctl
.SocketIRQ
);
80 int __declspec(dllexport
) __aros
sock_shutdown(struct SocketController
*ctl
)
82 int res
= WSACleanup();
87 ctl
->Command
= SOCK_CMD_SHUTDOWN
;
88 SetEvent(ctl
->ResolverEvent
);
90 KrnFreeIRQ(ctl
->ResolverIRQ
);
91 KrnFreeIRQ(ctl
->SocketIRQ
);