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