lxc move_fd MACRO 관련 질문...
글쓴이: gyoonus / 작성시간: 월, 2021/12/20 - 4:25오후
안녕하세요... 뉴비입니다..
lxc 분석하다가 ... 질문이 하나 있어서~ 문의드립니다.
#define move_fd(fd) \ ({ \ int __internal_fd__ = (fd); \ (fd) = -EBADF; \ __internal_fd__; \ }) int lxc_unix_connect_type(struct sockaddr_un *addr, int type) { __do_close int fd = -EBADF; int ret; ssize_t len; fd = socket(AF_UNIX, type | SOCK_CLOEXEC, 0); if (fd < 0) return syserror("Failed to open new AF_UNIX socket"); if (addr->sun_path[0] == '\0') len = strlen(&addr->sun_path[1]); else len = strlen(&addr->sun_path[0]); ret = connect(fd, (struct sockaddr *)addr, offsetof(struct sockaddr_un, sun_path) + len); if (ret < 0) return syserror("Failed to bind new AF_UNIX socket"); return move_fd(fd); }
굳이 왜 move_fd 메크로를 활용해서 __internal_fd__의 값을 보내는 걸까요...
알려주시면 감사하겠습니다...
Forums:
그렇게 안 하면 int fd에 __do_close가
그렇게 안 하면
int fd
에__do_close
가 지정되어 있어서 반환되기 전에fd
가 닫혀버리거든요.fd
에 의해 닫히는 일을 막기 위해서 여기에-EBADF
를 집어넣고, 원래 값은 백업해뒀다가 반환하는거죠.감사합니다
감사해요!!!
댓글 달기