Как мне получить имя параметра сокета в C?

#c #networking #libc

#c #сеть #libc

Вопрос:

У меня есть некоторый код, который выглядит следующим образом:

     switch (option) {
        case MVM_SO_BROADCAST:
        case MVM_SO_KEEPALIVE:
        case MVM_SO_REUSEADDR:
        case MVM_SO_DONTROUTE:
        case MVM_SO_SNDBUF:
        case MVM_SO_RCVBUF:
        case MVM_SO_OOBINLINE:
        case MVM_TCP_NODELAY: {
            int input;
            len = sizeof(int);
            e = getsockopt(s, SOL_SOCKET, (int)option, (char *)amp;input, amp;len);
            output = input;
            break;
        }
        case MVM_SO_LINGER: {
            struct linger input;
            len = sizeof(struct linger);
            e = getsockopt(s, SOL_SOCKET, (int)option, (char *)amp;input, amp;len);
            // Match Java's behaviour with SO_LINGER
            output = (input.l_onoff >= 0) ? input.l_linger : -1;
            break;
        }
        default:
            MVM_exception_throw_adhoc(tc, "this socket option is not supported by MoarVM: %d", (int)option);
            break;
    }
  

MVM_SO_BROADCAST и тому подобное являются макросами для SO_BROADCAST и тому подобного. В случае по умолчанию в коммутаторе я хочу напечатать имя указанного параметра сокета вместо его значения, которое бесполезно для конечного пользователя. Есть ли функция в libc для этого?

Комментарии:

1. Для этого нет функции libc. Вам придется написать свой собственный.

2. при вызове getsockopt() , и он возвращает указание ‘active’, затем вызывайте printf() с именем и т.д. Для stdout . Это указывает на то, что каждый случай в опубликованном коде будет иметь разное содержимое для printf() так должно быть в каждом отдельном случае