Пример #1
0
 ssize_t
 sendmsg(
   const iovec* iov,
   int iovlen,
   const MessageFlags& flags
 ) {
   debug_assert_gt(iovlen, 0);
   iovec iov0 = iov[0];
   iov0.iov_len = 1;
   return stream_socket.sendmsg(&iov0, 1, flags);
 }
Пример #2
0
bool ReaderWriterLock::wrlock() {
  EnterCriticalSection(cs);

  if (active_writer_readers != 0) {
    waiting_writers_count++;
    debug_assert_gt(waiting_writers_count, 0);
    LeaveCriticalSection(cs);
    WaitForSingleObject(hReadyToWrite, INFINITE);
  } else {
    debug_assert_eq(active_writer_readers, 0);
    active_writer_readers = MAKELONG(0, 1);
    LeaveCriticalSection(cs);
  }

  return true;
}
Пример #3
0
const SocketAddress* SocketAddress::filter(int family) const {
  debug_assert_gt(len(family), 0);

  const SocketAddress* next_socket_address = this;

  do {
    if (next_socket_address->get_family() == family) {
      return next_socket_address;
    } else {
      next_socket_address = next_socket_address->next_socket_address;
    }
  } while (next_socket_address != NULL);

  WSASetLastError(WSAEAFNOSUPPORT);

  return NULL;
}
Пример #4
0
void ReaderWriterLock::rdunlock() {
  EnterCriticalSection(cs);

  debug_assert_eq(HIWORD(active_writer_readers), 0);
  debug_assert_gt(LOWORD(active_writer_readers), 0);

  if (--active_writer_readers == 0) {
    ResetEvent(hReadyToRead);
  }

  if (waiting_writers_count != 0 && active_writer_readers == 0) {
    waiting_writers_count--;
    active_writer_readers = MAKELONG(0, 1);
    ReleaseSemaphore(hReadyToWrite, 1, NULL);
  }

  LeaveCriticalSection(cs);
}