michallenc opened a new issue, #16688: URL: https://github.com/apache/nuttx/issues/16688
### Is your feature request related to a problem? Please describe. This is a followup of [!16555](https://github.com/apache/nuttx/issues/16555) that solved the issue of non working DGRAM sockets. ### Describe the solution you'd like Polling for Unix datagram sockets (`SOCK_DGRAM`) is currently not implemented. The implementation to `local_netpoll.c` seems pretty straightforward (at least for `POLLIN`), just create receiver if it doesn't exist (default state for the datagram, basically the same as in `psock_dgram_recvfrom` and call `file_poll`. The behavior of poll is still not as expected though, because it returns `POLLHUP` right after the poll is called. But this event should not return on datagram sockets as they are not connection oriented. This bring us back to the same issue @Cynerd already faced with stream sockets in https://github.com/apache/nuttx/pull/14667. NuttX sockets are implemented with fifos and pipes, but the expected behavior of local sockets (both stream and dgram) is a bit different from pipes. ```diff diff --git a/net/local/local_netpoll.c b/net/local/local_netpoll.c index e68833aa9a..264c59c28a 100644 --- a/net/local/local_netpoll.c +++ b/net/local/local_netpoll.c @@ -161,7 +161,29 @@ int local_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds) if (conn->lc_proto == SOCK_DGRAM) { - return -ENOSYS; + if (conn->lc_infile.f_inode == NULL) + { + ret = local_create_halfduplex(conn, conn->lc_path, conn->lc_rcvsize); + if (ret < 0) + { + nerr("ERROR: Failed to create FIFO for %s: %d\n", + conn->lc_path, ret); + return ret; + } + + /* Open the receiving side of the transfer */ + + ret = local_open_receiver(conn, false); + if (ret < 0) + { + nerr("ERROR: Failed to open FIFO for %s: %d\n", + conn->lc_path, ret); + local_release_halfduplex(conn); + return ret; + } + } + + return file_poll(&conn->lc_infile, fds, true); } #ifdef CONFIG_NET_LOCAL_STREAM @@ -310,7 +332,7 @@ int local_pollteardown(FAR struct socket *psock, FAR struct pollfd *fds) if (conn->lc_proto == SOCK_DGRAM) { - return -ENOSYS; + return file_poll(&conn->lc_infile, fds, false); } #ifdef CONFIG_NET_LOCAL_STREAM ``` The implementation of polling for DGRAM would probably require the rewrite of local sockets and reimplementation with internet socket code base instead of fifos/pipes. ### Describe alternatives you've considered _No response_ ### Verification - [x] I have verified before submitting the report. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org