+void SocketEngine::DispatchTrialWrites()
+{
+ std::vector<int> working_list;
+ working_list.reserve(trials.size());
+ working_list.assign(trials.begin(), trials.end());
+ trials.clear();
+ for(unsigned int i=0; i < working_list.size(); i++)
+ {
+ int fd = working_list[i];
+ EventHandler* eh = GetRef(fd);
+ if (!eh)
+ continue;
+ int mask = eh->event_mask;
+ eh->event_mask &= ~(FD_ADD_TRIAL_READ | FD_ADD_TRIAL_WRITE);
+ if ((mask & (FD_ADD_TRIAL_READ | FD_READ_WILL_BLOCK)) == FD_ADD_TRIAL_READ)
+ eh->HandleEvent(EVENT_READ, 0);
+ if ((mask & (FD_ADD_TRIAL_WRITE | FD_WRITE_WILL_BLOCK)) == FD_ADD_TRIAL_WRITE)
+ eh->HandleEvent(EVENT_WRITE, 0);
+ }
+}
+
+bool SocketEngine::AddFdRef(EventHandler* eh)