c/c++语言开发共享(How)我可以从套接字文件描述符中确定套接字系列

我正在编写一个包含IPC函数的API,这些函数将数据发送到另一个可能是本地或另一个主机的进程。 我真的很喜欢发送function如下:

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()的效率,并且想知道我每次发送都能负担得起。

    请参阅getsockname(2) 。 然后,检查该系列的struct sockaddr

    编辑:作为旁注,它有时也有用于查询信息 ,在这种情况下, 信息libc套接字

    编辑:

    如果不每次都查找它,你真的无法知道。 它不能简单地缓存,因为可以通过关闭和重新打开套接字号来重用它。 我只是查看了glibc代码,似乎getsockname只是一个系统调用,这可能是令人讨厌的性能。

    但我的建议是使用某种面向对象的概念。 让用户传递指向您之前返回给他的结构的指针,即让他使用您的API注册/打开套接字。 然后你可以缓存你想要的那个套接字。

    为什么不总是发送网络字节顺序?

    如果你控制客户端和服务器代码我有一个不同的建议,我过去成功使用过。

    让消息的前四个字节为已知整数值。 接收器然后可以检查前四个字节以查看它是否与已知值匹配。 如果匹配,则不需要字节交换。

    这使得您无需在两台计算机具有相同的字节顺序时进行字节交换。

    需要了解更多c/c++开发分享(How)我可以从套接字文件描述符中确定套接字系列,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享(How)我可以从套接字文件描述符中确定套接字系列相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979374.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐