我正在编写一个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()的方式如下:
socketFamily()的实现方法如下:
unsigned short socketFamily(int sd)
{
struct sockaddr sa;
size_t len;
getsockname(sd, &sa, &len);
return sa.sa_family;
}
但是我有点担心getsockname()的效率,我想知道每次发送时是否负担得起。