btashton commented on issue #1639:
URL: 
https://github.com/apache/incubator-nuttx/issues/1639#issuecomment-682125424


   @patacongo I started to dig into this a little around handling the socket 
protocol logic. This is what I am thinking
   
   Currently when the socket is created we call `net_sockif(sa_family_t family, 
int type, int protocol)` which gives us a lot of what we need control of.
   
   Linux defines approximately this (I removed some) as protocol dependent
   ```
   struct proto_ops {
        int             family;
        int             (*release)
        int             (*bind)
        int             (*connect)
        int             (*socketpair)
        int             (*accept)
        int             (*getname)
        int             (*ioctl)
        int             (*gettstamp)
        int             (*listen)
        int             (*shutdown)
        int             (*setsockopt)
        int             (*getsockopt)
        int             (*sendmsg)
        int             (*recvmsg)
   };
   ```
   
   That maps fairly well to `sock_intf_s`
   ```
   struct sock_intf_s
   {
     CODE int        (*si_setup)(FAR struct socket *psock, int protocol);
     CODE sockcaps_t (*si_sockcaps)(FAR struct socket *psock);
     CODE void       (*si_addref)(FAR struct socket *psock);
     CODE int        (*si_bind)(FAR struct socket *psock,
                       FAR const struct sockaddr *addr, socklen_t addrlen);
     CODE int        (*si_getsockname)(FAR struct socket *psock,
                       FAR struct sockaddr *addr, FAR socklen_t *addrlen);
     CODE int        (*si_getpeername)(FAR struct socket *psock,
                       FAR struct sockaddr *addr, FAR socklen_t *addrlen);
     CODE int        (*si_listen)(FAR struct socket *psock, int backlog);
     CODE int        (*si_connect)(FAR struct socket *psock,
                       FAR const struct sockaddr *addr, socklen_t addrlen);
     CODE int        (*si_accept)(FAR struct socket *psock,
                       FAR struct sockaddr *addr, FAR socklen_t *addrlen,
                       FAR struct socket *newsock);
     CODE int        (*si_poll)(FAR struct socket *psock,
                       FAR struct pollfd *fds, bool setup);
     CODE ssize_t    (*si_send)(FAR struct socket *psock, FAR const void *buf,
                       size_t len, int flags);
     CODE ssize_t    (*si_sendto)(FAR struct socket *psock, FAR const void *buf,
                       size_t len, int flags, FAR const struct sockaddr *to,
                       socklen_t tolen);
   #ifdef CONFIG_NET_SENDFILE
     CODE ssize_t    (*si_sendfile)(FAR struct socket *psock,
                       FAR struct file *infile, FAR off_t *offset,
                       size_t count);
   #endif
     CODE ssize_t    (*si_recvfrom)(FAR struct socket *psock, FAR void *buf,
                       size_t len, int flags, FAR struct sockaddr *from,
                       FAR socklen_t *fromlen);
   #ifdef CONFIG_NET_CMSG
     CODE ssize_t    (*si_recvmsg)(FAR struct socket *psock,
       FAR struct msghdr *msg, int flags);
     CODE ssize_t    (*si_sendmsg)(FAR struct socket *psock,
       FAR struct msghdr *msg, int flags);
   #endif
     CODE int        (*si_close)(FAR struct socket *psock);
   #ifdef CONFIG_NET_USRSOCK
     CODE int        (*si_ioctl)(FAR struct socket *psock, int cmd,
                       FAR void *arg, size_t arglen);
   #endif
   };
   ```
   
   Some notable missing interfaces are `getsockopt` `setsockopt` and `ioctl` 
without `NET_USRSOCK`.
   Do you think  it would be reasonable to adapt this interface?
   


----------------------------------------------------------------
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.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to