Это
if(epoll_ctl(epoll_fd, EPOLL_CTL_ADD, 0, &event))
, вероятно, должно быть
if(epoll_ctl(epoll_fd, EPOLL_CTL_ADD, myfd, &event))
В первой строке вы указываете epoll контролировать fd 0, который обычно является стандартным входом. Вот почему он ждет его, например, для вашего Enter.
Обратите внимание, что ваш оригинальный код работает только по совпадению. Просто бывает, что когда вы вводите, в вашем myfd
есть данные (и даже если нет блоков msgrcv
). И как только вы нажмете Enter, он будет постоянно просыпаться, так как epoll знает, что STDIN готов, но вы не читали с него.