Что-то, что я использую на проектах, является statusInd tinyint не пустое значение по умолчанию 0 столбцов с помощью statusInd, поскольку битовая маска позволяет мне выполнять, управление данными (удалите, заархивируйте, копируйте, восстановите, и т.д.). Используя это в представлениях я могу тогда сделать распределение данных, публикацию, и т.д. для приложений потребления. Если производительность является беспокойством относительно представлений, маленькие таблицы фактов использования для поддержки этой информации, отбрасывая факт, отбрасывает отношение и допускает масштабируемый, удаляет.
Масштабы хорошо и информационно-центрическое хранение довольно маленького места данных - ключ для 350 ГБ + dbs с проблемами в реальном времени. Используя альтернативы, таблицы, триггеры имеют немного служебные, который в зависимости от потребности может или не может работать на Вас.
связанные с SOX Аудиты могут потребовать, чтобы больше, чем поле помогли в Вашем случае, но это может помочь. Наслаждайтесь
Я использую send () вместо write (), которые не обрабатывают сигнал:
bzero(buffer, MAX_SIZE_BUFFER);
n = read(sockfd, buffer, MAX_SIZE_BUFFER - 1);
printf("after read%d\n", n);
if (n <= 0)
{
break;
}
n2 = send(newsockfd, buffer, n, MSG_NOSIGNAL);
if (n2 == -1)
{
close(sockfd);
close(newsockfd);
return;
}
if (n2 != n)
{
break;
}
Программирование сокета может быть довольно сложным, потому что вы часто не знаете, что ошибка произошла намного позже.
Например, если машина, на которую вы пишете, выключается Аномально вызов записи может быть успешным (поскольку вы могли записывать данные во внутренние буферы ОС) только для сбоя во время вызова закрытия.
Если у вас нет способа проверки активности сокета на уровне приложения (т. е. отправка сообщение и требующее ответа в течение некоторого периода времени), вы не можете узнать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.
Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, касающегося сокета (чтение, запись, закрытие и т. Д. ..).
потому что вы часто не знаете, что ошибка произошла гораздо позже.Например, если машина, на которую вы пишете, аварийно завершает работу, вызов записи может быть успешным (потому что вы смогли записать во внутренние буферы ОС) , только для сбоя во время вызова закрытия.
Если у вас нет способа проверки активности сокета на уровне приложения (т.е. отправки сообщения и запроса ответа в течение некоторого периода времени), у вас нет возможности узнать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.
Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, касающегося сокета (чтение, запись, закрытие и т. Д. ..).
потому что вы часто не знаете, что ошибка произошла гораздо позже.Например, если машина, на которую вы пишете, аварийно завершает работу, вызов записи может быть успешным (потому что вы смогли записать во внутренние буферы ОС) , только для сбоя во время вызова закрытия.
Если у вас нет способа проверки активности сокета на уровне приложения (т. е. отправки сообщения и запроса ответа в течение некоторого периода времени), у вас нет возможности узнать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.
Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, который касается сокета (чтение, запись, закрытие и т. Д. ..).
вызов записи может быть успешным (поскольку вы могли записывать данные во внутренние буферы ОС) только для сбоя во время вызова закрытия.Если у вас нет способа проверки активности сокета на уровне приложения (т. е. отправки сообщения и требуя ответа в течение определенного периода времени) вы не можете знать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.
Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, касающегося сокета (чтение, запись, закрытие и т. Д. ..).
вызов записи может быть успешным (поскольку вы могли записывать данные во внутренние буферы ОС) только для сбоя во время вызова закрытия.Если у вас нет способа проверки активности сокета на уровне приложения (т. е. отправки сообщения и требуя ответа в течение определенного периода времени) вы не можете знать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.
Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, который касается сокета (чтение, запись, закрытие и т. Д. ..).
Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, который касается сокета (чтение, запись, закрытие и т. Д. ..).
Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, касающегося сокета (чтение, запись, закрытие и т. Д. ..).
Для JSONP на PHP см. Пример здесь . Вы добавляете «обратный звонок» к URL-адресу, определяющему имя функции для запуска, и в вашем PHP-коде убедитесь, что вы исполнили JavaScript, который вызывает обратный вызов с данными. jQuery внедряет элемент скрипта с вашим контентом - при запуске вызывает обратный вызов.
t записывать что-либо в данный момент (это может быть невыполненная работа сети или какая-то другая проблема, но определенно (пока) не критическая). Обновление: Как указано caf в комментариях, я забыл принять во внимание обработку сигналов. Вы должны игнорировать сигнал разорванной трубы, иначе запись
завершится внутренним сбоем при повышении этого сигнала.
Вы можете сделать это, вставив:
struct sigaction new_actn, old_actn;
new_actn.sa_handler = SIG_IGN;
sigemptyset (&new_actn.sa_mask);
new_actn.sa_flags = 0;
sigaction (SIGPIPE, &new_actn, &old_actn);
перед тем, как начать использовать функции сокета. Затем вы можете использовать:
sigaction (SIGPIPE, &old_actn, NULL);
, чтобы восстановить предыдущую обработку сигнала.