[netstack] datagram sockets are always ready
Change-Id: I50b2b9e37670f2400683c9e1710b7ff5af4b1753
diff --git a/src/connectivity/network/netstack/fuchsia_posix_socket.go b/src/connectivity/network/netstack/fuchsia_posix_socket.go
index 8cc4a45..c3e0067 100644
--- a/src/connectivity/network/netstack/fuchsia_posix_socket.go
+++ b/src/connectivity/network/netstack/fuchsia_posix_socket.go
@@ -1460,6 +1460,11 @@
sp.metadata.addEndpoint(localE, ep)
+ if err := s.endpointWithEvent.local.SignalPeer(0, zxsocket.SignalOutgoing); err != nil {
+ s.close()
+ return socket.ProviderSocket2Result{}, err
+ }
+
return socket.ProviderSocket2ResultWithResponse(socket.ProviderSocket2Response{
S: socket.BaseSocketInterface(datagramSocketInterface),
}), nil
diff --git a/src/connectivity/network/tests/bsdsocket_test.cc b/src/connectivity/network/tests/bsdsocket_test.cc
index c825e5c..9809090c 100644
--- a/src/connectivity/network/tests/bsdsocket_test.cc
+++ b/src/connectivity/network/tests/bsdsocket_test.cc
@@ -2204,11 +2204,19 @@
EXPECT_EQ(close(recvfd), 0) << strerror(errno);
}
-// TODO port reuse
+TEST(NetDatagramTest, DatagramPOLLOUT) {
+ fbl::unique_fd fd;
+ ASSERT_TRUE(fd = fbl::unique_fd(socket(AF_INET, SOCK_DGRAM, 0))) << strerror(errno);
+
+ struct pollfd fds = {fd.get(), POLLOUT, 0};
+ int nfds = poll(&fds, 1, kTimeout);
+ EXPECT_EQ(1, nfds) << "poll returned: " << nfds << " errno: " << strerror(errno);
+
+ EXPECT_EQ(close(fd.release()), 0) << strerror(errno);
+}
// DatagramSendtoRecvfrom tests if UDP send automatically binds an ephemeral
// port where the receiver can responds to.
-
TEST(NetDatagramTest, DatagramSendtoRecvfrom) {
int recvfd;
ASSERT_GE(recvfd = socket(AF_INET, SOCK_DGRAM, 0), 0) << strerror(errno);