设置套接字后,最好在套接字描述符上使用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
Run Code Online (Sandbox Code Playgroud)
编辑:我也解密流
setbuf(stream, NULL)
Run Code Online (Sandbox Code Playgroud)
为避免必须按照评论中的提及进行刷新.
我一直在使用这种方法,因为它允许我重用为FILE*流编写的代码,并且我的优点是能够使用格式字符串(我正在使用人类可读的文本).GNU似乎暗示这是一个好主意.
http://www.gnu.org/software/libc/manual/html_node/Streams-and-File-Descriptors.html
但是,通常当我看到使用套接字的代码时,使用套接字描述符而不是所有操作的流.使用较低级别的功能是否有优势?
如果您需要更精确的控制和错误条件的处理,请使用read
和write
.如果你没有,并且更喜欢stdio函数的便利性,那么使用FILE*
包装器.
使用FILE *
包装器的一个问题是您无法控制数据实际写入套接字的方式和时间.如果你不小心,这可能导致低效的网络利用率和过度延迟(由于Nagle的算法与延迟的ACK交互).
我会建议使用read
和write
直接,如果这是一个高性能的互联网应用.
归档时间: |
|
查看次数: |
4346 次 |
最近记录: |