c/c++语言开发共享我应该使用文件描述符或流来读取/写入套接字

设置套接字后,最好在套接字描述符上使用read(2)和write(2)调用,或者使用fdopen(3)将流与套接字描述符关联,然后使用stdio(3)函数?

int sfd = socket(PF_INET, SOCK_STREAM, 0); // setup the socket using sfd FILE * stream = fdopen(sfd, "r+"); // use fprintf, fscanf, etc 

编辑:我也解密了流

 setbuf(stream, NULL) 

为了避免像评论中提到的那样冲洗它。

我一直在使用这种方法,因为它允许我重用为FILE *流编写的代码,并且我有能够使用格式字符串的优点。 GNU似乎暗示这是一个好主意。

https://www.gnu.org/software/libc/manual/html_node/Streams-and-File-Descriptors.html

但是,通常当我看到使用套接字的代码时,使用套接字描述符而不是所有操作的流。 使用较低级别的function是否有优势?

    如果您需要更精确的控制和错误条件处理,请使用write 。 如果不这样做,并且更喜欢stdio函数的便利性,那么请使用FILE*包装器。

    使用FILE *包装器的一个问题是,您无法控制数据实际写入套接字的方式和时间。 如果你不小心,这可能导致低效的网络利用率和过度延迟(由于Nagle的算法与延迟的ACK交互)。

    如果这是一个高性能的Internet应用程序,我建议直接使用read

    需要了解更多c/c++开发分享我应该使用文件描述符或流来读取/写入套接字,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享我应该使用文件描述符或流来读取/写入套接字相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

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

      精彩推荐