anchao commented on a change in pull request #4069: URL: https://github.com/apache/incubator-nuttx/pull/4069#discussion_r663811404
########## File path: net/udp/udp_callback.c ########## @@ -83,6 +83,14 @@ static uint16_t udp_datahandler(FAR struct net_driver_s *dev, FAR void *src_addr; uint8_t src_addr_size; +#if CONFIG_NET_RECV_BUFSIZE > 0 + while (iob_get_queue_size(&conn->readahead) > conn->rcvbufs) + { + iob = iob_remove_queue(&conn->readahead); + iob_free_chain(iob, IOBUSER_NET_UDP_READAHEAD); + } +#endif Review comment: The behavior here is the result of my test on Linux. If the UDP network storm comes and exceeds the limit of recv, the old packets will be discarded ########## File path: net/udp/udp_callback.c ########## @@ -83,6 +83,14 @@ static uint16_t udp_datahandler(FAR struct net_driver_s *dev, FAR void *src_addr; uint8_t src_addr_size; +#if CONFIG_NET_RECV_BUFSIZE > 0 + while (iob_get_queue_size(&conn->readahead) > conn->rcvbufs) + { + iob = iob_remove_queue(&conn->readahead); + iob_free_chain(iob, IOBUSER_NET_UDP_READAHEAD); + } +#endif Review comment: Yes, I can't find a suitable reference except Linux. Do you have any suggestions? ########## File path: net/socket/setsockopt.c ########## @@ -131,9 +131,71 @@ static int psock_socketlevel_option(FAR struct socket *psock, int option, { _SO_SETOPT(psock->s_options, option); } + + return OK; } - return OK; +#if CONFIG_NET_RECV_BUFSIZE > 0 + case SO_RCVBUF: /* Sets receive buffer size */ + { + int buffersize; + + /* Verify that option is the size of an 'int'. Should also check + * that 'value' is properly aligned for an 'int' + */ + + if (value_len != sizeof(int)) + { + return -EINVAL; + } + + /* Get the value. Is the option being set or cleared? */ + + buffersize = *(FAR int *)value; + + if (buffersize < 0 || buffersize > INT_MAX) + { + return -EINVAL; + } + + net_lock(); + +#if defined(CONFIG_NET_TCP) && !defined(CONFIG_NET_TCP_NO_STACK) + if (psock->s_type == SOCK_STREAM) + { + FAR struct tcp_conn_s *conn; + + conn = (FAR struct tcp_conn_s *)psock->s_conn; + + /* Save the receive buffer size */ + + conn->rcv_bufs = buffersize; + } + else +#endif +#if defined(CONFIG_NET_UDP) && !defined(CONFIG_NET_UDP_NO_STACK) + if (psock->s_type == SOCK_DGRAM) + { + FAR struct udp_conn_s *conn; + + conn = (FAR struct udp_conn_s *)psock->s_conn; + + /* Save the receive buffer size */ + + conn->rcvbufs = buffersize; Review comment: The naming style follows the member of tcp_conn_s/udp_conn_s, tcp is rcv_bufs, udp is rcvbufs -- 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 For queries about this service, please contact Infrastructure at: us...@infra.apache.org