#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()
так должно быть в каждом отдельном случае