net: Make si_listen callback optional

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
Xiang Xiao 2023-03-06 13:08:24 +08:00 committed by Petro Karashchenko
parent 2553b7701c
commit a97e2523a4
9 changed files with 17 additions and 262 deletions

View File

@ -57,7 +57,6 @@ static int bluetooth_getsockname(FAR struct socket *psock,
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
static int bluetooth_getpeername(FAR struct socket *psock,
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
static int bluetooth_listen(FAR struct socket *psock, int backlog);
static int bluetooth_connect(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
static int bluetooth_accept(FAR struct socket *psock,
@ -87,7 +86,7 @@ const struct sock_intf_s g_bluetooth_sockif =
bluetooth_bind, /* si_bind */
bluetooth_getsockname, /* si_getsockname */
bluetooth_getpeername, /* si_getpeername */
bluetooth_listen, /* si_listen */
NULL, /* si_listen */
bluetooth_connect, /* si_connect */
bluetooth_accept, /* si_accept */
bluetooth_poll_local, /* si_poll */
@ -672,36 +671,6 @@ static int bluetooth_getpeername(FAR struct socket *psock,
return OK;
}
/****************************************************************************
* Name: bluetooth_listen
*
* Description:
* To accept connections, a socket is first created with psock_socket(), a
* willingness to accept incoming connections and a queue limit for
* incoming connections are specified with psock_listen(), and then the
* connections are accepted with psock_accept(). For the case of
* PF_BLUETOOTH sockets, psock_listen() calls this function. The listen()
* call does not apply only to PF_BLUETOOTH sockets.
*
* Input Parameters:
* psock Reference to an internal, boound socket structure.
* backlog The maximum length the queue of pending connections may grow.
* If a connection request arrives with the queue full, the client
* may receive an error with an indication of ECONNREFUSED or,
* if the underlying protocol supports retransmission, the request
* may be ignored so that retries succeed.
*
* Returned Value:
* On success, zero is returned. On error, a negated errno value is
* returned. See listen() for the set of appropriate error values.
*
****************************************************************************/
int bluetooth_listen(FAR struct socket *psock, int backlog)
{
return -EOPNOTSUPP;
}
/****************************************************************************
* Name: bluetooth_poll
*

View File

@ -53,7 +53,6 @@ static sockcaps_t can_sockcaps(FAR struct socket *psock);
static void can_addref(FAR struct socket *psock);
static int can_bind(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
static int can_listen(FAR struct socket *psock, int backlog);
static int can_connect(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
static int can_accept(FAR struct socket *psock, FAR struct sockaddr *addr,
@ -74,7 +73,7 @@ const struct sock_intf_s g_can_sockif =
can_bind, /* si_bind */
NULL, /* si_getsockname */
NULL, /* si_getpeername */
can_listen, /* si_listen */
NULL, /* si_listen */
can_connect, /* si_connect */
can_accept, /* si_accept */
can_poll_local, /* si_poll */
@ -338,37 +337,6 @@ static int can_bind(FAR struct socket *psock,
return OK;
}
/****************************************************************************
* Name: can_listen
*
* Description:
* To accept connections, a socket is first created with psock_socket(), a
* willingness to accept incoming connections and a queue limit for
* incoming connections are specified with psock_listen(), and then the
* connections are accepted with psock_accept(). For the case of AFINET
* and AFINET6 sockets, psock_listen() calls this function. The
* psock_listen() call applies only to sockets of type SOCK_STREAM or
* SOCK_SEQPACKET.
*
* Input Parameters:
* psock Reference to an internal, bound socket structure.
* backlog The maximum length the queue of pending connections may grow.
* If a connection request arrives with the queue full, the client
* may receive an error with an indication of ECONNREFUSED or,
* if the underlying protocol supports retransmission, the request
* may be ignored so that retries succeed.
*
* Returned Value:
* On success, zero is returned. On error, a negated errno value is
* returned. See listen() for the set of appropriate error values.
*
****************************************************************************/
static int can_listen(FAR struct socket *psock, int backlog)
{
return -EOPNOTSUPP;
}
/****************************************************************************
* Name: can_connect
*

View File

@ -47,7 +47,6 @@
static int icmp_setup(FAR struct socket *psock);
static sockcaps_t icmp_sockcaps(FAR struct socket *psock);
static void icmp_addref(FAR struct socket *psock);
static int icmp_listen(FAR struct socket *psock, int backlog);
static int icmp_connect(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
static int icmp_accept(FAR struct socket *psock,
@ -69,7 +68,7 @@ const struct sock_intf_s g_icmp_sockif =
NULL, /* si_bind */
NULL, /* si_getsockname */
NULL, /* si_getpeername */
icmp_listen, /* si_listen */
NULL, /* si_listen */
icmp_connect, /* si_connect */
icmp_accept, /* si_accept */
icmp_netpoll, /* si_poll */
@ -273,36 +272,6 @@ static int icmp_accept(FAR struct socket *psock, FAR struct sockaddr *addr,
return -EAFNOSUPPORT;
}
/****************************************************************************
* Name: icmp_listen
*
* Description:
* To accept connections, a socket is first created with psock_socket(), a
* willingness to accept incoming connections and a queue limit for
* incoming connections are specified with psock_listen(), and then the
* connections are accepted with psock_accept(). For the case of raw
* packet sockets, psock_listen() calls this function. The psock_listen()
* call applies only to sockets of type SOCK_STREAM or SOCK_SEQPACKET.
*
* Input Parameters:
* psock Reference to an internal, boound socket structure.
* backlog The maximum length the queue of pending connections may grow.
* If a connection request arrives with the queue full, the client
* may receive an error with an indication of ECONNREFUSED or,
* if the underlying protocol supports retransmission, the request
* may be ignored so that retries succeed.
*
* Returned Value:
* On success, zero is returned. On error, a negated errno value is
* returned. See listen() for the set of appropriate error values.
*
****************************************************************************/
int icmp_listen(FAR struct socket *psock, int backlog)
{
return -EOPNOTSUPP;
}
/****************************************************************************
* Name: icmp_netpoll
*

View File

@ -47,7 +47,6 @@
static int icmpv6_setup(FAR struct socket *psock);
static sockcaps_t icmpv6_sockcaps(FAR struct socket *psock);
static void icmpv6_addref(FAR struct socket *psock);
static int icmpv6_listen(FAR struct socket *psock, int backlog);
static int icmpv6_connect(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
static int icmpv6_accept(FAR struct socket *psock,
@ -69,7 +68,7 @@ const struct sock_intf_s g_icmpv6_sockif =
NULL, /* si_bind */
NULL, /* si_getsockname */
NULL, /* si_getpeername */
icmpv6_listen, /* si_listen */
NULL, /* si_listen */
icmpv6_connect, /* si_connect */
icmpv6_accept, /* si_accept */
icmpv6_netpoll, /* si_poll */
@ -273,36 +272,6 @@ static int icmpv6_accept(FAR struct socket *psock, FAR struct sockaddr *addr,
return -EAFNOSUPPORT;
}
/****************************************************************************
* Name: icmpv6_listen
*
* Description:
* To accept connections, a socket is first created with psock_socket(), a
* willingness to accept incoming connections and a queue limit for
* incoming connections are specified with psock_listen(), and then the
* connections are accepted with psock_accept(). For the case of raw
* packet sockets, psock_listen() calls this function. The psock_listen()
* call applies only to sockets of type SOCK_STREAM or SOCK_SEQPACKET.
*
* Input Parameters:
* psock Reference to an internal, boound socket structure.
* backlog The maximum length the queue of pending connections may grow.
* If a connection request arrives with the queue full, the client
* may receive an error with an indication of ECONNREFUSED or,
* if the underlying protocol supports retransmission, the request
* may be ignored so that retries succeed.
*
* Returned Value:
* On success, zero is returned. On error, a negated errno value is
* returned. See listen() for the set of appropriate error values.
*
****************************************************************************/
int icmpv6_listen(FAR struct socket *psock, int backlog)
{
return -EOPNOTSUPP;
}
/****************************************************************************
* Name: icmpv6_netpoll
*

View File

@ -55,7 +55,6 @@ static int ieee802154_getsockname(FAR struct socket *psock,
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
static int ieee802154_getpeername(FAR struct socket *psock,
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
static int ieee802154_listen(FAR struct socket *psock, int backlog);
static int ieee802154_connect(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
static int ieee802154_accept(FAR struct socket *psock,
@ -77,7 +76,7 @@ const struct sock_intf_s g_ieee802154_sockif =
ieee802154_bind, /* si_bind */
ieee802154_getsockname, /* si_getsockname */
ieee802154_getpeername, /* si_getpeername */
ieee802154_listen, /* si_listen */
NULL, /* si_listen */
ieee802154_connect, /* si_connect */
ieee802154_accept, /* si_accept */
ieee802154_poll_local, /* si_poll */
@ -546,36 +545,6 @@ static int ieee802154_getpeername(FAR struct socket *psock,
return OK;
}
/****************************************************************************
* Name: ieee802154_listen
*
* Description:
* To accept connections, a socket is first created with psock_socket(), a
* willingness to accept incoming connections and a queue limit for
* incoming connections are specified with psock_listen(), and then the
* connections are accepted with psock_accept(). For the case of
* PF_IEEE802154 sockets, psock_listen() calls this function. The listen()
* call does not apply only to PF_IEEE802154 sockets.
*
* Input Parameters:
* psock Reference to an internal, boound socket structure.
* backlog The maximum length the queue of pending connections may grow.
* If a connection request arrives with the queue full, the client
* may receive an error with an indication of ECONNREFUSED or,
* if the underlying protocol supports retransmission, the request
* may be ignored so that retries succeed.
*
* Returned Value:
* On success, zero is returned. On error, a negated errno value is
* returned. See listen() for the set of appropriate error values.
*
****************************************************************************/
int ieee802154_listen(FAR struct socket *psock, int backlog)
{
return -EOPNOTSUPP;
}
/****************************************************************************
* Name: ieee802154_poll
*

View File

@ -56,9 +56,6 @@ static int local_getsockname(FAR struct socket *psock,
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
static int local_getpeername(FAR struct socket *psock,
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
#ifndef CONFIG_NET_LOCAL_STREAM
static int local_listen(FAR struct socket *psock, int backlog);
#endif
static int local_connect(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
#ifndef CONFIG_NET_LOCAL_STREAM
@ -92,7 +89,11 @@ const struct sock_intf_s g_local_sockif =
local_bind, /* si_bind */
local_getsockname, /* si_getsockname */
local_getpeername, /* si_getpeername */
#ifdef CONFIG_NET_LOCAL_STREAM
local_listen, /* si_listen */
#else
NULL, /* si_listen */
#endif
local_connect, /* si_connect */
local_accept, /* si_accept */
local_poll, /* si_poll */
@ -548,38 +549,6 @@ static int local_setsockopt(FAR struct socket *psock, int level, int option,
#endif
/****************************************************************************
* Name: local_listen
*
* Description:
* To accept connections, a socket is first created with psock_socket(), a
* willingness to accept incoming connections and a queue limit for
* incoming connections are specified with psock_listen(), and then the
* connections are accepted with psock_accept(). For the case of local
* unix sockets, psock_listen() calls this function. The psock_listen()
* call applies only to sockets of type SOCK_STREAM or SOCK_SEQPACKET.
*
* Input Parameters:
* psock Reference to an internal, boound socket structure.
* backlog The maximum length the queue of pending connections may grow.
* If a connection request arrives with the queue full, the client
* may receive an error with an indication of ECONNREFUSED or,
* if the underlying protocol supports retransmission, the request
* may be ignored so that retries succeed.
*
* Returned Value:
* On success, zero is returned. On error, a negated errno value is
* returned. See listen() for the set of appropriate error values.
*
****************************************************************************/
#ifndef CONFIG_NET_LOCAL_STREAM
int local_listen(FAR struct socket *psock, int backlog)
{
return -EOPNOTSUPP;
}
#endif
/****************************************************************************
* Name: local_connect
*

View File

@ -56,7 +56,6 @@ static int netlink_getsockname(FAR struct socket *psock,
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
static int netlink_getpeername(FAR struct socket *psock,
FAR struct sockaddr *addr, FAR socklen_t *addrlen);
static int netlink_listen(FAR struct socket *psock, int backlog);
static int netlink_connect(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
static int netlink_accept(FAR struct socket *psock,
@ -82,7 +81,7 @@ const struct sock_intf_s g_netlink_sockif =
netlink_bind, /* si_bind */
netlink_getsockname, /* si_getsockname */
netlink_getpeername, /* si_getpeername */
netlink_listen, /* si_listen */
NULL, /* si_listen */
netlink_connect, /* si_connect */
netlink_accept, /* si_accept */
netlink_poll, /* si_poll */
@ -365,37 +364,6 @@ static int netlink_getpeername(FAR struct socket *psock,
return OK;
}
/****************************************************************************
* Name: netlink_listen
*
* Description:
* To accept connections, a socket is first created with psock_socket(), a
* willingness to accept incoming connections and a queue limit for
* incoming connections are specified with psock_listen(), and then the
* connections are accepted with psock_accept(). For the case of AFINET
* and AFINET6 sockets, psock_listen() calls this function. The
* psock_listen() call applies only to sockets of type SOCK_STREAM or
* SOCK_SEQPACKET.
*
* Input Parameters:
* psock Reference to an internal, bound socket structure.
* backlog The maximum length the queue of pending connections may grow.
* If a connection request arrives with the queue full, the client
* may receive an error with an indication of ECONNREFUSED or,
* if the underlying protocol supports retransmission, the request
* may be ignored so that retries succeed.
*
* Returned Value:
* On success, zero is returned. On error, a negated errno value is
* returned. See listen() for the set of appropriate error values.
*
****************************************************************************/
static int netlink_listen(FAR struct socket *psock, int backlog)
{
return -EOPNOTSUPP;
}
/****************************************************************************
* Name: netlink_connect
*

View File

@ -52,7 +52,6 @@ static sockcaps_t pkt_sockcaps(FAR struct socket *psock);
static void pkt_addref(FAR struct socket *psock);
static int pkt_bind(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
static int pkt_listen(FAR struct socket *psock, int backlog);
static int pkt_connect(FAR struct socket *psock,
FAR const struct sockaddr *addr, socklen_t addrlen);
static int pkt_accept(FAR struct socket *psock,
@ -74,7 +73,7 @@ const struct sock_intf_s g_pkt_sockif =
pkt_bind, /* si_bind */
NULL, /* si_getsockname */
NULL, /* si_getpeername */
pkt_listen, /* si_listen */
NULL, /* si_listen */
pkt_connect, /* si_connect */
pkt_accept, /* si_accept */
pkt_poll_local, /* si_poll */
@ -368,36 +367,6 @@ static int pkt_bind(FAR struct socket *psock,
}
}
/****************************************************************************
* Name: pkt_listen
*
* Description:
* To accept connections, a socket is first created with psock_socket(), a
* willingness to accept incoming connections and a queue limit for
* incoming connections are specified with psock_listen(), and then the
* connections are accepted with psock_accept(). For the case of raw
* packet sockets, psock_listen() calls this function. The psock_listen()
* call applies only to sockets of type SOCK_STREAM or SOCK_SEQPACKET.
*
* Input Parameters:
* psock Reference to an internal, boound socket structure.
* backlog The maximum length the queue of pending connections may grow.
* If a connection request arrives with the queue full, the client
* may receive an error with an indication of ECONNREFUSED or,
* if the underlying protocol supports retransmission, the request
* may be ignored so that retries succeed.
*
* Returned Value:
* On success, zero is returned. On error, a negated errno value is
* returned. See listen() for the set of appropriate error values.
*
****************************************************************************/
int pkt_listen(FAR struct socket *psock, int backlog)
{
return -EOPNOTSUPP;
}
/****************************************************************************
* Name: pkt_poll
*

View File

@ -82,7 +82,12 @@ int psock_listen(FAR struct socket *psock, int backlog)
/* Let the address family's listen() method handle the operation */
DEBUGASSERT(psock->s_sockif != NULL && psock->s_sockif->si_listen != NULL);
DEBUGASSERT(psock->s_sockif != NULL);
if (psock->s_sockif->si_listen == NULL)
{
return -EOPNOTSUPP;
}
ret = psock->s_sockif->si_listen(psock, backlog);
if (ret >= 0)
{