GLUT не очень хорошо это поддерживает. См. GLUT FAQ # 18
Вы можете зарегистрировать функцию бездействия с помощью glutIdleFunc, а в функции бездействия опросить свой сокет, чтобы узнать, есть ли новые данные. Чтобы избежать блокировки при чтении из сокета, необходимо установить неблокируемый сокет путем вызова:
#include <unistd.h>
#include <fcntl.h>
...
sockfd = socket(PF_INET, SOCK_STREAM, 0);
fcntl(sockfd, F_SETFL, O_NONBLOCK);
(взято из Руководство Биджа по работе в сети )
Недостаток этого подхода заключается в том, что ваше приложение будет проверять состояние сокета 60 раз в секунду, а не просто ожидает поступления сетевых данных.