- int ret = _Wait(seconds, microseconds, REQ_CONNECT | REQ_LOST);
-
- if (ret)
- m_connected = TRUE;
-
- return m_connected;
-}
-
-void wxSocketClient::OnRequest(wxRequestEvent evt)
-{
- if (evt == EVT_CONNECT) {
- if (m_connected) {
- SetNotify(m_neededreq & ~REQ_CONNECT);
- return;
- }
- m_waitflags = 0x40;
- m_connected = TRUE;
- OldOnNotify(EVT_CONNECT);
- DestroyCallbacks();
- return;
- }
- wxSocketBase::OnRequest(evt);
-}
-
-/////////////////////////////////////////////////////////////////
-// wxSocketHandler ///////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////
-
-wxSocketHandler *wxSocketHandler::master = NULL;
-#if defined(__WINDOWS__)
-static int win_initialized = 0;
-#endif
-
-// --------------------------------------------------------------
-// --------- wxSocketHandler CONSTRUCTOR ------------------------
-// --------------------------------------------------------------
-#ifdef __WINDOWS__
-
-extern char wxPanelClassName[];
-
-LRESULT APIENTRY _EXPORT wxSocketHandlerWndProc(HWND hWnd, UINT message,
- WPARAM wParam, LPARAM lParam)
-{
- wxSocketHandler *h_sock = (wxSocketHandler *)GetWindowLong(hWnd, GWL_USERDATA);
- wxNode *node = h_sock->smsg_list->Find(message);
- wxSocketBase *sock;
- wxSocketBase::wxRequestEvent sk_req;
- UINT event = WSAGETSELECTEVENT(lParam);
-
- if (!node)
- return DefWindowProc(hWnd, message, wParam, lParam);
-
- sock = (wxSocketBase *)node->Data();
-
- switch (event) {
- case FD_READ:
- sk_req = wxSocketBase::EVT_READ;
- break;
- case FD_WRITE:
- sk_req = wxSocketBase::EVT_WRITE;
- break;
- case FD_CLOSE:
- sk_req = wxSocketBase::EVT_LOST;
- break;
- case FD_ACCEPT:
- sk_req = wxSocketBase::EVT_ACCEPT;
- break;
- case FD_CONNECT:
- sk_req = wxSocketBase::EVT_CONNECT;
- break;
- }
- sock->OnRequest(sk_req);
-
- return (LRESULT)0;
-}
-
-FARPROC wxSocketSubClassProc = NULL;
-
-#endif
-
-wxSocketHandler::wxSocketHandler()
-{
-#if defined(__WINDOWS__)
- if (!win_initialized) {
- WSADATA wsaData;
-
- WSAStartup((1 << 8) | 1, &wsaData);
- win_initialized = 1;
- }
- internal = new wxSockHandlerInternal;
- internal->sockWin = ::CreateWindow(wxPanelClassName, NULL, 0,
- 0, 0, 0, 0, NULL, (HMENU) NULL,
- wxhInstance, 0);
-
- // Subclass the window
- if (!wxSocketSubClassProc)
- wxSocketSubClassProc = MakeProcInstance((FARPROC) wxSocketHandlerWndProc, wxhInstance);
- ::SetWindowLong(internal->sockWin, GWL_WNDPROC, (LONG) wxSocketSubClassProc);
- ::SetWindowLong(internal->sockWin, GWL_USERDATA, (LONG) this);
-
- internal->firstAvailableMsg = 5000;
- smsg_list = new wxList(wxKEY_INTEGER);
-#endif
-
- socks = new wxList;
-
-#ifndef __WINDOWS__
- signal(SIGPIPE, SIG_IGN);
-#endif
-}
-
-// --------------------------------------------------------------
-// --------- wxSocketHandler DESTRUCTOR -------------------------
-// --------------------------------------------------------------
-wxSocketHandler::~wxSocketHandler()
-{
- wxNode *next_node, *node = socks->First();
-
- while (node) {
- wxSocketBase* sock = (wxSocketBase*)node->Data();
-
- delete sock;
- next_node = node->Next();
- delete node;
- node = next_node;
- }
-
- delete socks;
-
-#ifdef __WINDOWS__
- delete smsg_list;