设置套接字后,最好在套接字描述符上使用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