add event_source_fd_set_fd

This commit is contained in:
lixianjing 2025-02-27 18:03:03 +08:00
parent 8680ac8579
commit 0e85a30882
4 changed files with 56 additions and 2 deletions

View File

@ -1,4 +1,8 @@
# 最新动态
2025/02/27
* 增加event_source_fd对象支持fd为-1和设置fd的情况(感谢智明提供补丁)
2025/02/26
* 修复conf_node的node_type不正确的问题(感谢福明提供补丁)

View File

@ -31,7 +31,8 @@ static int32_t event_source_fd_get_fd(event_source_t* source) {
}
static ret_t event_source_fd_check(event_source_t* source) {
return RET_OK;
event_source_fd_t* event_source_fd = EVENT_SOURCE_FD(source);
return event_source_fd->fd >= 0 ? RET_OK : RET_FAIL;
}
static ret_t event_source_fd_dispatch(event_source_t* source) {
@ -48,7 +49,7 @@ event_source_t* event_source_fd_create(int fd, event_source_on_event_t on_event,
tk_object_t* obj = NULL;
event_source_t* event_source = NULL;
event_source_fd_t* event_source_fd = NULL;
return_value_if_fail(fd >= 0 && on_event != NULL, NULL);
return_value_if_fail(on_event != NULL, NULL);
obj = tk_object_create(&s_event_source_fd_vtable);
event_source = EVENT_SOURCE(obj);
@ -66,3 +67,10 @@ event_source_t* event_source_fd_create(int fd, event_source_on_event_t on_event,
return event_source;
}
ret_t event_source_fd_set_fd(event_source_t* source, int fd) {
event_source_fd_t* event_source_fd = EVENT_SOURCE_FD(source);
return_value_if_fail(event_source_fd != NULL, RET_BAD_PARAMS);
event_source_fd->fd = fd;
return RET_OK;
}

View File

@ -59,6 +59,18 @@ struct _event_source_fd_t {
*/
event_source_t* event_source_fd_create(int fd, event_source_on_event_t on_event, void* ctx);
/**
* @method event_source_fd_set_fd
*
* fd
*
* @param {event_source_t*} source
* @param {int} fd select等待的文件描述符
*
* @return {ret_t} RET_OK表示成功
*/
ret_t event_source_fd_set_fd(event_source_t* source, int fd);
#define EVENT_SOURCE_FD(obj) ((event_source_fd_t*)(obj))
END_C_DECLS

View File

@ -10,6 +10,7 @@ static ret_t event_source_on_data(event_source_t* source) {
}
TEST(EventSourceFd, basic) {
s_fd_times = 0;
event_source_t* event_source = event_source_fd_create(1, event_source_on_data, NULL);
ASSERT_EQ(event_source_get_fd(event_source), 1);
@ -20,3 +21,32 @@ TEST(EventSourceFd, basic) {
tk_object_unref(TK_OBJECT(event_source));
}
TEST(EventSourceFd, none_fd) {
int fd = 2;
s_fd_times = 0;
event_source_t* event_source = event_source_fd_create(-1, event_source_on_data, NULL);
ASSERT_EQ(event_source != NULL, true);
ASSERT_EQ(event_source_fd_set_fd(event_source, fd), RET_OK);
ASSERT_EQ(event_source_get_fd(event_source), fd);
ASSERT_EQ(event_source_check(event_source), RET_OK);
ASSERT_EQ(event_source_get_wakeup_time(event_source), 0xffffu);
ASSERT_EQ(event_source_dispatch(event_source), RET_OK);
ASSERT_EQ(s_fd_times, 1u);
ASSERT_EQ(event_source_fd_set_fd(event_source, -1), RET_OK);
ASSERT_EQ(event_source_get_fd(event_source), -1);
ASSERT_EQ(event_source_check(event_source), RET_FAIL);
ASSERT_EQ(s_fd_times, 1u);
ASSERT_EQ(event_source_fd_set_fd(event_source, fd), RET_OK);
ASSERT_EQ(event_source_get_fd(event_source), fd);
ASSERT_EQ(event_source_check(event_source), RET_OK);
ASSERT_EQ(event_source_get_wakeup_time(event_source), 0xffffu);
ASSERT_EQ(event_source_dispatch(event_source), RET_OK);
ASSERT_EQ(s_fd_times, 2u);
tk_object_unref(TK_OBJECT(event_source));
}