我正在编写一个 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() 的效率,想知道我是否能负担得起每次发送。