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

Function ff_hook_accept

adapter/syscall/ff_hook_syscall.c:662–729  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

660}
661
662int
663ff_hook_accept(int fd, struct sockaddr *addr, socklen_t *addrlen)
664{
665 DEBUG_LOG("ff_hook_accept, fd:%d, addr:%p, len:%p\n", fd, addr, addrlen);
666
667 if ((addr == NULL && addrlen != NULL) ||
668 (addr != NULL && addrlen == NULL)) {
669 errno = EINVAL;
670 return -1;
671 }
672
673 CHECK_FD_OWNERSHIP(accept, (fd, addr, addrlen));
674
675 DEFINE_REQ_ARGS_STATIC(accept);
676 static __thread struct sockaddr *sh_addr = NULL;
677 static __thread socklen_t sh_addr_len = 0;
678 static __thread socklen_t *sh_addrlen = NULL;
679
680 if (addr != NULL) {
681 if (sh_addr == NULL || sh_addr_len < *addrlen) {
682 if(sh_addr) {
683 share_mem_free(sh_addr);
684 }
685
686 sh_addr_len = *addrlen;
687 sh_addr = share_mem_alloc(sh_addr_len);
688 if (sh_addr == NULL) {
689 RETURN_ERROR_NOFREE(ENOMEM);
690 }
691 }
692
693 if (sh_addrlen == NULL) {
694 sh_addrlen = share_mem_alloc(sizeof(socklen_t));
695 if (sh_addrlen == NULL) {
696 //share_mem_free(sh_addr); // Don't free
697 RETURN_ERROR_NOFREE(ENOMEM);
698 }
699 }
700 *sh_addrlen = *addrlen;
701
702 args->addr = sh_addr;
703 args->addrlen = sh_addrlen;
704 }else {
705 args->addr = NULL;
706 args->addrlen = NULL;
707 }
708
709 args->fd = fd;
710
711 SYSCALL(FF_SO_ACCEPT, args);
712
713 if (ret > 0) {
714 ret = convert_fstack_fd(ret);
715 }
716
717 if (addr) {
718 if (ret > 0) {
719 socklen_t cplen = *sh_addrlen > *addrlen ?

Callers

nothing calls this directly

Calls 2

convert_fstack_fdFunction · 0.70
rte_memcpyFunction · 0.50

Tested by

no test coverage detected