У меня есть этот код, который я использую, чтобы проверить, доступен ли для записи сокет UDP, и затем он должен отправить некоторые данные, если он доступен для записи. Я должен отправлять данные постоянно, но он должен прекратить отправку, когда мое интернет-соединение отключено. Приложение работает на компьютере, который использует модем, но иногда модем зависает, но мое приложение пытается отправить данные, не зная, что интернет-соединение больше не доступно.
Открыть сокет UDP
int socket_fd;
addr.sin_family = AF_INET;
addr.sin_port = htons(999);
addr.sin_addr.s_addr = ip_of_server;
socket_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
bind(fd, (struct sockaddr*)&addr, sizeof(addr));
Проверьте, доступен ли для записи сокет, затем отправьте данные
struct timeval tv;
fd_set write_fds;
int ready;
tv.tv_sec = 0;
tv.tv_usec = 0;
FD_ZERO(&write_fds);
FD_SET(socket_fd, &write_fds);
ready = select(socket_fd + 1, NULL, &write_fds, NULL, &tv);
if ( ready && FD_ISSET(socket_fd, &write_fds) )
{
//Send data here
}
Моя проблема заключается в том, что select () по-прежнему сообщает, что сокет доступен для записи, даже если я отключу интернет-соединение. Действительно ли select () работает таким образом? Разве это не говорит вам, что сокет не доступен для записи, так как сетевое соединение уже отключено?
Что было бы лучшим решением для этого?