More build fixes for QUICHE on Windows. This gets the following to build: * //third_party/quic/core/io:event_loop_socket_factory_lib * //third_party/quic/core/io:quic_default_event_loop * //third_party/quiche/common/platform/api/... Note that the tests for the latter path currently fail due to some issues related to ICU. PiperOrigin-RevId: 527603143
diff --git a/quiche/quic/core/io/quic_all_event_loops_test.cc b/quiche/quic/core/io/quic_all_event_loops_test.cc index ed62824..1467671 100644 --- a/quiche/quic/core/io/quic_all_event_loops_test.cc +++ b/quiche/quic/core/io/quic_all_event_loops_test.cc
@@ -42,7 +42,7 @@ class MockQuicSocketEventListener : public QuicSocketEventListener { public: MOCK_METHOD(void, OnSocketEvent, - (QuicEventLoop* /*event_loop*/, QuicUdpSocketFd /*fd*/, + (QuicEventLoop* /*event_loop*/, SocketFd /*fd*/, QuicSocketEventMask /*events*/), (override)); };
diff --git a/quiche/quic/core/io/quic_event_loop.h b/quiche/quic/core/io/quic_event_loop.h index e02a0f0..6a446ea 100644 --- a/quiche/quic/core/io/quic_event_loop.h +++ b/quiche/quic/core/io/quic_event_loop.h
@@ -9,9 +9,9 @@ #include <memory> #include "absl/base/attributes.h" +#include "quiche/quic/core/io/socket.h" #include "quiche/quic/core/quic_alarm_factory.h" #include "quiche/quic/core/quic_clock.h" -#include "quiche/quic/core/quic_udp_socket.h" namespace quic { @@ -28,7 +28,7 @@ public: virtual ~QuicSocketEventListener() = default; - virtual void OnSocketEvent(QuicEventLoop* event_loop, QuicUdpSocketFd fd, + virtual void OnSocketEvent(QuicEventLoop* event_loop, SocketFd fd, QuicSocketEventMask events) = 0; }; @@ -53,20 +53,20 @@ // if it is, the function returns false. The |listener| must be alive for as // long as it is registered. virtual ABSL_MUST_USE_RESULT bool RegisterSocket( - QuicUdpSocketFd fd, QuicSocketEventMask events, + SocketFd fd, QuicSocketEventMask events, QuicSocketEventListener* listener) = 0; // Removes the listener associated with |fd|. Returns false if the listener // is not found. - virtual ABSL_MUST_USE_RESULT bool UnregisterSocket(QuicUdpSocketFd fd) = 0; + virtual ABSL_MUST_USE_RESULT bool UnregisterSocket(SocketFd fd) = 0; // Adds |events| to the list of the listened events for |fd|, given that |fd| // is already registered. Must be only called if SupportsEdgeTriggered() is // false. - virtual ABSL_MUST_USE_RESULT bool RearmSocket(QuicUdpSocketFd fd, + virtual ABSL_MUST_USE_RESULT bool RearmSocket(SocketFd fd, QuicSocketEventMask events) = 0; // Causes the |fd| to be notified of |events| on the next event loop iteration // even if none of the specified events has happened. virtual ABSL_MUST_USE_RESULT bool ArtificiallyNotifyEvent( - QuicUdpSocketFd fd, QuicSocketEventMask events) = 0; + SocketFd fd, QuicSocketEventMask events) = 0; // Runs a single iteration of the event loop. The iteration will run for at // most |default_timeout|.
diff --git a/quiche/quic/core/io/quic_poll_event_loop.cc b/quiche/quic/core/io/quic_poll_event_loop.cc index f56635f..c156ca6 100644 --- a/quiche/quic/core/io/quic_poll_event_loop.cc +++ b/quiche/quic/core/io/quic_poll_event_loop.cc
@@ -4,8 +4,6 @@ #include "quiche/quic/core/io/quic_poll_event_loop.h" -#include <poll.h> - #include <algorithm> #include <cerrno> #include <memory> @@ -38,8 +36,7 @@ QuicPollEventLoop::QuicPollEventLoop(QuicClock* clock) : clock_(clock) {} -bool QuicPollEventLoop::RegisterSocket(QuicUdpSocketFd fd, - QuicSocketEventMask events, +bool QuicPollEventLoop::RegisterSocket(SocketFd fd, QuicSocketEventMask events, QuicSocketEventListener* listener) { auto [it, success] = registrations_.insert({fd, std::make_shared<Registration>()}); @@ -52,12 +49,11 @@ return true; } -bool QuicPollEventLoop::UnregisterSocket(QuicUdpSocketFd fd) { +bool QuicPollEventLoop::UnregisterSocket(SocketFd fd) { return registrations_.erase(fd); } -bool QuicPollEventLoop::RearmSocket(QuicUdpSocketFd fd, - QuicSocketEventMask events) { +bool QuicPollEventLoop::RearmSocket(SocketFd fd, QuicSocketEventMask events) { auto it = registrations_.find(fd); if (it == registrations_.end()) { return false; @@ -66,7 +62,7 @@ return true; } -bool QuicPollEventLoop::ArtificiallyNotifyEvent(QuicUdpSocketFd fd, +bool QuicPollEventLoop::ArtificiallyNotifyEvent(SocketFd fd, QuicSocketEventMask events) { auto it = registrations_.find(fd); if (it == registrations_.end()) { @@ -168,7 +164,7 @@ } void QuicPollEventLoop::DispatchIoEvent(std::vector<ReadyListEntry>& ready_list, - QuicUdpSocketFd fd, PollMask mask) { + SocketFd fd, PollMask mask) { auto it = registrations_.find(fd); if (it == registrations_.end()) { QUIC_BUG(poll returned an unregistered fd) << fd; @@ -260,4 +256,12 @@ return std::make_unique<AlarmFactory>(this); } +int QuicPollEventLoop::PollSyscall(pollfd* fds, size_t nfds, int timeout) { +#if defined(_WIN32) + return WSAPoll(fds, nfds, timeout); +#else + return ::poll(fds, nfds, timeout); +#endif // defined(_WIN32) +} + } // namespace quic
diff --git a/quiche/quic/core/io/quic_poll_event_loop.h b/quiche/quic/core/io/quic_poll_event_loop.h index 6b2ec49..7c7f4bf 100644 --- a/quiche/quic/core/io/quic_poll_event_loop.h +++ b/quiche/quic/core/io/quic_poll_event_loop.h
@@ -5,17 +5,21 @@ #ifndef QUICHE_QUIC_CORE_IO_QUIC_POLL_EVENT_LOOP_H_ #define QUICHE_QUIC_CORE_IO_QUIC_POLL_EVENT_LOOP_H_ +#if defined(_WIN32) +#include <winsock2.h> +#else #include <poll.h> +#endif #include <memory> #include "absl/container/btree_map.h" #include "absl/types/span.h" #include "quiche/quic/core/io/quic_event_loop.h" +#include "quiche/quic/core/io/socket.h" #include "quiche/quic/core/quic_alarm.h" #include "quiche/quic/core/quic_alarm_factory.h" #include "quiche/quic/core/quic_clock.h" -#include "quiche/quic/core/quic_udp_socket.h" #include "quiche/common/quiche_linked_hash_map.h" namespace quic { @@ -42,22 +46,20 @@ // QuicEventLoop implementation. bool SupportsEdgeTriggered() const override { return false; } ABSL_MUST_USE_RESULT bool RegisterSocket( - QuicUdpSocketFd fd, QuicSocketEventMask events, + SocketFd fd, QuicSocketEventMask events, QuicSocketEventListener* listener) override; - ABSL_MUST_USE_RESULT bool UnregisterSocket(QuicUdpSocketFd fd) override; - ABSL_MUST_USE_RESULT bool RearmSocket(QuicUdpSocketFd fd, + ABSL_MUST_USE_RESULT bool UnregisterSocket(SocketFd fd) override; + ABSL_MUST_USE_RESULT bool RearmSocket(SocketFd fd, QuicSocketEventMask events) override; ABSL_MUST_USE_RESULT bool ArtificiallyNotifyEvent( - QuicUdpSocketFd fd, QuicSocketEventMask events) override; + SocketFd fd, QuicSocketEventMask events) override; void RunEventLoopOnce(QuicTime::Delta default_timeout) override; std::unique_ptr<QuicAlarmFactory> CreateAlarmFactory() override; const QuicClock* GetClock() override { return clock_; } protected: // Allows poll(2) calls to be mocked out in unit tests. - virtual int PollSyscall(pollfd* fds, nfds_t nfds, int timeout) { - return ::poll(fds, nfds, timeout); - } + virtual int PollSyscall(pollfd* fds, size_t nfds, int timeout); private: friend class QuicPollEventLoopPeer; @@ -105,7 +107,7 @@ // Used for deferred execution of I/O callbacks. struct ReadyListEntry { - QuicUdpSocketFd fd; + SocketFd fd; std::weak_ptr<Registration> registration; QuicSocketEventMask events; }; @@ -114,8 +116,7 @@ // registration order. This isn't strictly speaking necessary, but makes // testing things easier. using RegistrationMap = - quiche::QuicheLinkedHashMap<QuicUdpSocketFd, - std::shared_ptr<Registration>>; + quiche::QuicheLinkedHashMap<SocketFd, std::shared_ptr<Registration>>; // Alarms are stored as weak pointers, since the alarm can be cancelled and // disappear while in the queue. using AlarmList = absl::btree_multimap<QuicTime, std::weak_ptr<Alarm*>>; @@ -131,8 +132,8 @@ void ProcessAlarmsUpTo(QuicTime time); // Adds the I/O callbacks for |fd| to the |ready_lits| as appopriate. - void DispatchIoEvent(std::vector<ReadyListEntry>& ready_list, - QuicUdpSocketFd fd, short mask); // NOLINT(runtime/int) + void DispatchIoEvent(std::vector<ReadyListEntry>& ready_list, SocketFd fd, + short mask); // NOLINT(runtime/int) // Runs all of the callbacks on the ready list. void RunReadyCallbacks(std::vector<ReadyListEntry>& ready_list);
diff --git a/quiche/quic/core/io/quic_poll_event_loop_test.cc b/quiche/quic/core/io/quic_poll_event_loop_test.cc index f0e9557..d53d883 100644 --- a/quiche/quic/core/io/quic_poll_event_loop_test.cc +++ b/quiche/quic/core/io/quic_poll_event_loop_test.cc
@@ -46,7 +46,7 @@ class MockQuicSocketEventListener : public QuicSocketEventListener { public: MOCK_METHOD(void, OnSocketEvent, - (QuicEventLoop* /*event_loop*/, QuicUdpSocketFd /*fd*/, + (QuicEventLoop* /*event_loop*/, SocketFd /*fd*/, QuicSocketEventMask /*events*/), (override)); };
diff --git a/quiche/quic/qbone/bonnet/icmp_reachable.cc b/quiche/quic/qbone/bonnet/icmp_reachable.cc index 8f85190..4ac7109 100644 --- a/quiche/quic/qbone/bonnet/icmp_reachable.cc +++ b/quiche/quic/qbone/bonnet/icmp_reachable.cc
@@ -196,7 +196,7 @@ } void IcmpReachable::EpollCallback::OnSocketEvent(QuicEventLoop* event_loop, - QuicUdpSocketFd fd, + SocketFd fd, QuicSocketEventMask events) { bool can_read_more = reachable_->OnEvent(fd); if (can_read_more) {
diff --git a/quiche/quic/qbone/bonnet/icmp_reachable.h b/quiche/quic/qbone/bonnet/icmp_reachable.h index 529ccc7..f00c99a 100644 --- a/quiche/quic/qbone/bonnet/icmp_reachable.h +++ b/quiche/quic/qbone/bonnet/icmp_reachable.h
@@ -96,7 +96,7 @@ EpollCallback(EpollCallback&&) = delete; EpollCallback& operator=(EpollCallback&&) = delete; - void OnSocketEvent(QuicEventLoop* event_loop, QuicUdpSocketFd fd, + void OnSocketEvent(QuicEventLoop* event_loop, SocketFd fd, QuicSocketEventMask events) override; private: