小编har*_*nen的帖子

使用libevent2处理文件I/O的问题

我和libevent2合作了一段时间,但通常我用它来处理网络I/O(使用套接字).现在我需要阅读许多不同的文件,所以我也想使用它.我创建了这段代码:

int file = open(filename, O_RDONLY);
struct event *ev_file_read = event_new(ev_base, file, EV_READ | EV_PERSIST, read_file, NULL);

if(event_add(ev_file_read, NULL))
        error("adding file event");
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用.我在尝试添加事件时收到此消息:

[警告] fd 7上的Epoll ADD(1)失败了.旧事件为0; 读取更改为1(添加); 写入更改为0(无):不允许添加文件事件的操作:不允许操作

该文件存在并具有读/写权限.

任何人都知道如何使用libevent处理文件IO?我还想到了缓冲事件,但是在API中只有函数bufferevent_socket_new()在这里不适用.

提前致谢.

linux file libevent

4
推荐指数
1
解决办法
4835
查看次数

Linux TCP套接字崩溃

我编写通过Linux TCP套接字进行通信的网络应用程序.最近我注意到发送系统调用崩溃我的应用程序.当两个对手都启动时,它工作正常(我现在正在测试崩溃恢复).但是当一个对等体出现故障时,第二次崩溃会执行这段代码.

    fprintf(stderr, "out_tcp %d\n", out_tcp);
    if(send(out_tcp, &packet, sizeof(packet), 0) == -1) 
        fprintf(stderr, "send TCP error");
    fprintf(stderr, "after send");
Run Code Online (Sandbox Code Playgroud)

Socket已准备好并已连接,并且在第二个对等体出现故障之前已执行多次.我希望这段代码返回-1值,但它只在输出上产生"out_tcp 11"然后应用程序退出.没有错误消息,没有发送的返回值.我在Valgrind下运行它,它说应用程序正常退出 - 没有错误/警告消息.

有谁知道如何调试它?使用工具?因为我没有信息,所以我非常坚持这一点.

在此先感谢哈嫩

c sockets linux crash tcp

4
推荐指数
1
解决办法
3903
查看次数

标签 统计

linux ×2

c ×1

crash ×1

file ×1

libevent ×1

sockets ×1

tcp ×1