Я пишу API, который включает функции IPC, которые отправляют данные в другой процесс, который может быть локальным или на другом хосте. Мне бы очень хотелось, чтобы функция отправки была такой простой, как:
int mySendFunc(myDataThing_t* thing, int sd);
без вызова вызывающей стороны - в непосредственном контексте вызова mySendFunc () - приводит ли sd к локальному или удаленному процессу. Мне кажется, что если бы я мог так что-то вроде:
switch (socketFamily(sd)) {
case AF_UNIX:
case AF_LOCAL:
// Send without byteswapping
break;
default:
// Use htons() and htonl() on multi-byte values
break;
}
Было предложено реализовать socketFamily () как:
unsigned short socketFamily(int sd)
{
struct sockaddr sa;
size_t len;
getsockname(sd, &sa, &len);
return sa.sa_family;
}
Но я немного обеспокоен эффективностью getsockname () и задаюсь вопросом, могу ли я позволить себе делать это каждый раз, когда отправляю.