MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ff_hook_accept4

Function ff_hook_accept4

adapter/syscall/ff_hook_syscall.c:731–795  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

729}
730
731int
732ff_hook_accept4(int fd, struct sockaddr *addr,
733 socklen_t *addrlen, int flags)
734{
735 DEBUG_LOG("ff_hook_accept4, fd:%d, addr:%p, addrlen:%p, flags:%d\n", fd, addr, addrlen, flags);
736
737 CHECK_FD_OWNERSHIP(accept4, (fd, addr, addrlen, flags));
738
739 DEFINE_REQ_ARGS_STATIC(accept4);
740 static __thread struct sockaddr *sh_addr = NULL;
741 static __thread socklen_t sh_addr_len = 0;
742 static __thread socklen_t *sh_addrlen = NULL;
743
744 if (addr != NULL) {
745 if (sh_addr == NULL || sh_addr_len < *addrlen) {
746 if(sh_addr) {
747 share_mem_free(sh_addr);
748 }
749
750 sh_addr_len = *addrlen;
751 sh_addr = share_mem_alloc(sh_addr_len);
752 if (sh_addr == NULL) {
753 RETURN_ERROR_NOFREE(ENOMEM);
754 }
755 }
756
757 if (sh_addrlen == NULL) {
758 sh_addrlen = share_mem_alloc(sizeof(socklen_t));
759 if (sh_addrlen == NULL) {
760 //share_mem_free(sh_addr); // Don't free
761 RETURN_ERROR_NOFREE(ENOMEM);
762 }
763 }
764 *sh_addrlen = *addrlen;
765
766 args->addr = sh_addr;
767 args->addrlen = sh_addrlen;
768 args->flags = flags;
769 }else {
770 args->addr = NULL;
771 args->addrlen = NULL;
772 args->flags = flags;
773 }
774
775 args->fd = fd;
776
777 SYSCALL(FF_SO_ACCEPT4, args);
778
779 if (ret > 0) {
780 ret = convert_fstack_fd(ret);
781 }
782
783 if (addr) {
784 if (ret > 0) {
785 socklen_t cplen = *sh_addrlen > *addrlen ?
786 *addrlen : *sh_addrlen;
787 rte_memcpy(addr, sh_addr, cplen);
788 *addrlen = *sh_addrlen;

Callers

nothing calls this directly

Calls 2

convert_fstack_fdFunction · 0.70
rte_memcpyFunction · 0.50

Tested by

no test coverage detected