在寫代碼時,發現一個出現一個問題,就是在舊版本C++編譯後,運行正常,當改爲C++11編譯時,就會出現buffer overflow detected,最後定位後發現在下面代碼中出現了問題
fd_set fds;
FD_ZERO(&fds);
FD_SET(fd_, &fds);
r = select(fd_ + 1, &fds, NULL, NULL, &time_val);
就是查詢設備是否可讀的代碼,最後查了相關的問題
Handling more than 1024 file descriptors, in C on Linux
Buffer Overflow in FD_SET in nb_connect
是和fd_set有關,但是爲什麼和C++11出現溢出,而舊版本正常的原因,還未知,什麼時候知道了,再更新博客
解決方法是使用poll或者epoll
#include <poll.h>
struct pollfd pfd_read;
pfd_read.fd = fd_;
pfd_read.events = POLLIN;//查詢事件是POLLIN
r = poll(&pfd_read, 1, timeout);