Всем привет. Ткните носом, хочу разобраться. Есть маленький клиент на си, соединяющийся по локальному сокету с сервером. Хочется, чтобы клиент дожидался ответа от сервера, что данные получены или отваливался по таймауту. Набросал небольшой код:
int poll_ret;
struct pollfd fds;
if (send(s, send_data, sizeof(send_data->level)
sizeof(send_data->cmd_id), 0) < 0) {
fprintf(stderr, "Cannot send to %s: %s.\n",LOCAL_SOCK,
strerror(errno));
close(s);
return FAILED;
}
fds.fd = s;
fds.events |= POLLIN;
poll_ret = poll(&fds, 1, 5000);
fprintf(stderr, "poll_ret = %d\n", poll_ret);
if (poll_ret < 0) {
perror("poll");
} else if (poll_ret == 0) {
fprintf(stderr, "End of data\n");
} else {
ret = read(fds.fd, buf, 100);
fprintf(stderr, "Data: %s\n", buf);
}