13
static clientfd_sk_t *clientfd_sk_new(ussl_sf_t *sf)
15
clientfd_sk_t *s = NULL;
16
if (NULL == (s = (typeof(s))malloc(sizeof(clientfd_sk_t)))) {
17
ussl_log_error("malloc for clientfd_sk_t failed, errno:%d", errno);
20
s->handle_event = (ussl_handle_event_t)clientfd_sk_handle_event;
21
s->type = CLIENT_SOCK;
23
ussl_dlink_init(&s->timeout_link);
28
static void clientfd_sk_delete(ussl_sf_t *sf, clientfd_sk_t *s)
32
remove_from_timeout_list(&s->timeout_link);
33
char client_addr[IP_STRING_MAX_LEN] = {0};
34
ussl_get_peer_addr(s->fd_info.client_fd, client_addr, IP_STRING_MAX_LEN);
37
shutdown(s->fd, SHUT_WR);
40
if (0 != (ret = libc_epoll_ctl(s->ep->fd, EPOLL_CTL_DEL, s->fd, NULL))) {
41
ussl_log_warn("delete client fd from epoll failed, epfd:%d, fd:%d, errno:%d", s->ep->fd,
45
if (0 != (ret = libc_epoll_ctl(s->fd_info.org_epfd, EPOLL_CTL_ADD,
46
s->fd_info.client_fd, &s->fd_info.event))) {
47
ussl_log_warn("give back fd to origin epoll failed, fd:%d, errno:%d", s->fd_info.client_fd,
51
ussl_log_info("give back fd to origin epoll succ, client_fd:%d, client_epfd:%d, event:0x%x, client_addr:%s, has_error:%d",
52
s->fd_info.client_fd, s->fd_info.org_epfd, s->fd_info.event.events, client_addr, s->has_error);
60
int clientfd_sf_init(ussl_sf_t *sf)
62
ussl_sf_init(sf, (void *)clientfd_sk_new, (void *)clientfd_sk_delete);
66
static acceptfd_sk_t *acceptfd_sk_new(ussl_sf_t *sf)
68
acceptfd_sk_t *s = NULL;
69
if (NULL == (s = (typeof(s))malloc(sizeof(acceptfd_sk_t)))) {
70
ussl_log_error("malloc for acceptfd_sk_t failed, errno:%d", errno);
73
s->handle_event = (ussl_handle_event_t)acceptfd_sk_handle_event;
74
s->type = SERVER_SOCK;
76
s->start_time = time(NULL);
79
ussl_dlink_init(&s->timeout_link);
84
static void acceptfd_sk_delete(ussl_sf_t *sf, acceptfd_sk_t *s)
87
remove_from_timeout_list(&s->timeout_link);
95
} else if (0 != (err = libc_epoll_ctl(s->ep->fd, EPOLL_CTL_DEL, s->fd, NULL))) {
96
ussl_log_warn("remove acceptfd from epoll failed, epfd:%d, fd:%d, errno:%d", s->ep->fd, s->fd,
98
} else if (0 != (err = dispatch_accept_fd_to_certain_group(s->fd, s->fd_info.client_gid))) {
99
ussl_log_warn("dispatch fd to default group failed, fd:%d, ret:%d", s->fd, ret);
106
if (0 != (err = libc_epoll_ctl(s->ep->fd, EPOLL_CTL_DEL, s->fd, NULL))) {
107
ussl_log_warn("delete accept fd from epoll failed, epfd:%d, fd:%d, errno:%d", s->ep->fd,
111
if (0 != (err = ussl_close(s->fd))) {
112
ussl_log_warn("ussl_close failed, fd:%d, errno:%d", s->fd, errno);
121
int acceptfd_sf_init(ussl_sf_t *sf)
123
ussl_sf_init(sf, (void *)acceptfd_sk_new, (void *)acceptfd_sk_delete);