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); }
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; }
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; }
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); }