Проверить соединение, открытое или закрытое? (в C в Linux)

Что-то, что я использую на проектах, является statusInd tinyint не пустое значение по умолчанию 0 столбцов с помощью statusInd, поскольку битовая маска позволяет мне выполнять, управление данными (удалите, заархивируйте, копируйте, восстановите, и т.д.). Используя это в представлениях я могу тогда сделать распределение данных, публикацию, и т.д. для приложений потребления. Если производительность является беспокойством относительно представлений, маленькие таблицы фактов использования для поддержки этой информации, отбрасывая факт, отбрасывает отношение и допускает масштабируемый, удаляет.

Масштабы хорошо и информационно-центрическое хранение довольно маленького места данных - ключ для 350 ГБ + dbs с проблемами в реальном времени. Используя альтернативы, таблицы, триггеры имеют немного служебные, который в зависимости от потребности может или не может работать на Вас.

связанные с SOX Аудиты могут потребовать, чтобы больше, чем поле помогли в Вашем случае, но это может помочь. Наслаждайтесь

10
задан Sajad Bahmani 1 November 2017 в 08:56
поделиться

3 ответа

Я использую 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;
}
14
ответ дан 3 December 2019 в 13:56
поделиться

Программирование сокета может быть довольно сложным, потому что вы часто не знаете, что ошибка произошла намного позже.

Например, если машина, на которую вы пишете, выключается Аномально вызов записи может быть успешным (поскольку вы могли записывать данные во внутренние буферы ОС) только для сбоя во время вызова закрытия.

Если у вас нет способа проверки активности сокета на уровне приложения (т. е. отправка сообщение и требующее ответа в течение некоторого периода времени), вы не можете узнать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.

Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, касающегося сокета (чтение, запись, закрытие и т. Д. ..).

потому что вы часто не знаете, что ошибка произошла гораздо позже.

Например, если машина, на которую вы пишете, аварийно завершает работу, вызов записи может быть успешным (потому что вы смогли записать во внутренние буферы ОС) , только для сбоя во время вызова закрытия.

Если у вас нет способа проверки активности сокета на уровне приложения (т.е. отправки сообщения и запроса ответа в течение некоторого периода времени), у вас нет возможности узнать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.

Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, касающегося сокета (чтение, запись, закрытие и т. Д. ..).

потому что вы часто не знаете, что ошибка произошла гораздо позже.

Например, если машина, на которую вы пишете, аварийно завершает работу, вызов записи может быть успешным (потому что вы смогли записать во внутренние буферы ОС) , только для сбоя во время вызова закрытия.

Если у вас нет способа проверки активности сокета на уровне приложения (т. е. отправки сообщения и запроса ответа в течение некоторого периода времени), у вас нет возможности узнать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.

Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, который касается сокета (чтение, запись, закрытие и т. Д. ..).

вызов записи может быть успешным (поскольку вы могли записывать данные во внутренние буферы ОС) только для сбоя во время вызова закрытия.

Если у вас нет способа проверки активности сокета на уровне приложения (т. е. отправки сообщения и требуя ответа в течение определенного периода времени) вы не можете знать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.

Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, касающегося сокета (чтение, запись, закрытие и т. Д. ..).

вызов записи может быть успешным (поскольку вы могли записывать данные во внутренние буферы ОС) только для сбоя во время вызова закрытия.

Если у вас нет способа проверки активности сокета на уровне приложения (т. е. отправки сообщения и требуя ответа в течение определенного периода времени) вы не можете знать. Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.

Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, который касается сокета (чтение, запись, закрытие и т. Д. ..).

Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.

Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, который касается сокета (чтение, запись, закрытие и т. Д. ..).

Если вы используете стандартный протокол, возможно, что-то уже существует для обработки ошибок.

Итак, краткий ответ заключается в том, что вам нужно проверять возврат ошибок практически от каждого вызова, касающегося сокета (чтение, запись, закрытие и т. Д. ..).

8
ответ дан 3 December 2019 в 13:56
поделиться

Для 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);
    

    , чтобы восстановить предыдущую обработку сигнала.

    17
    ответ дан 3 December 2019 в 13:56
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: