コード例 #1
0
static void socket_error_callback_fn(void *private_data, int datafd, int8_t channel, uint8_t tx_rx, int error, int errorno)
{
	struct totemknet_instance *instance = (struct totemknet_instance *)private_data;

	knet_log_printf (LOGSYS_LEVEL_DEBUG, "Knet socket ERROR notification called: txrx=%d, error=%d, errorno=%d", tx_rx, error, errorno);
	if ((error == -1 && errorno != EAGAIN) || (error == 0)) {
		knet_handle_remove_datafd(instance->knet_handle, datafd);
	}
}
コード例 #2
0
static void test(void)
{
    knet_handle_t knet_h;
    int logfds[2];
    int datafd = 0;
    int8_t channel = 0;

    printf("Test knet_handle_remove_datafd incorrect knet_h\n");

    if ((!knet_handle_remove_datafd(NULL, datafd)) || (errno != EINVAL)) {
        printf("knet_handle_remove_datafd accepted invalid knet_h or returned incorrect error: %s\n", strerror(errno));
        exit(FAIL);
    }

    setup_logpipes(logfds);

    knet_h = knet_handle_new(1, logfds[1], KNET_LOG_DEBUG);

    if (!knet_h) {
        printf("knet_handle_new failed: %s\n", strerror(errno));
        flush_logs(logfds[0], stdout);
        close_logpipes(logfds);
        exit(FAIL);
    }

    printf("Test knet_handle_remove_datafd with no datafd\n");

    datafd = 0;

    if ((!knet_handle_remove_datafd(knet_h, datafd)) || (errno != EINVAL)) {
        printf("knet_handle_remove_datafd accepted invalid datafd or returned incorrect error: %s\n", strerror(errno));
        knet_handle_free(knet_h);
        flush_logs(logfds[0], stdout);
        close_logpipes(logfds);
        exit(FAIL);
    }

    flush_logs(logfds[0], stdout);

    printf("Test knet_handle_remove_datafd with invalid datafd\n");

    datafd = 10;

    if ((!knet_handle_remove_datafd(knet_h, datafd)) || (errno != EINVAL)) {
        printf("knet_handle_remove_datafd accepted invalid channel or returned incorrect error: %s\n", strerror(errno));
        knet_handle_free(knet_h);
        flush_logs(logfds[0], stdout);
        close_logpipes(logfds);
        exit(FAIL);
    }

    flush_logs(logfds[0], stdout);

    printf("Test knet_handle_remove_datafd with valid datafd\n");

    if (knet_handle_enable_sock_notify(knet_h, &private_data, sock_notify) < 0) {
        printf("knet_handle_enable_sock_notify failed: %s\n", strerror(errno));
        knet_handle_free(knet_h);
        flush_logs(logfds[0], stdout);
        close_logpipes(logfds);
        exit(FAIL);
    }

    datafd = 0;
    channel = -1;

    if (knet_handle_add_datafd(knet_h, &datafd, &channel) < 0) {
        printf("knet_handle_add_datafd failed: %s\n", strerror(errno));
        knet_handle_free(knet_h);
        flush_logs(logfds[0], stdout);
        close_logpipes(logfds);
        exit(FAIL);
    }

    if (knet_handle_remove_datafd(knet_h, datafd) < 0) {
        printf("knet_handle_remove_datafd failed: %s\n", strerror(errno));
        knet_handle_free(knet_h);
        flush_logs(logfds[0], stdout);
        close_logpipes(logfds);
        exit(FAIL);
    }

    flush_logs(logfds[0], stdout);

    knet_handle_free(knet_h);
    flush_logs(logfds[0], stdout);
    close_logpipes(logfds);
}