今天在解决产品BUG时碰到这样一个问题,在设备启动的时候不断的按屏幕开关按键,由于屏幕开关按键是通过按键发送消息到QT底层来实现响应按键信息,当按键按下,而此时接收消息的程序还未启动,此时则一直停在这里等待返回,故导致整个系统无法正常启动。小小设置引出的大问题啊。
一、在recv接收数据时使用MSG_DONTWAIT标志,这将使某个单次接收操作为非阻塞方式,如下所示:
recv(sockfd, buffer, MAXBUF, MSG_DONTWAIT);
代码示例:
int byte = recv(sockfd, send_buffer, BUFSIZE, MSG_DONTWAIT);
if (byte > 0) {
printf("get %d message: %s\n", byte, char_send);
byte = 0;
} else if (byte < 0) {
if (errno == EAGAIN) {
errno = 0;
continue;
} else {
perror("recv failed");