【问题标题】:C++ socket send/recv vs write/readC++ 套接字发送/接收与写入/读取
【发布时间】:2013-11-27 02:54:44
【问题描述】:

在套接字ssize_t send(int __fd, const void* __buf, size_t __n, int __flags) 中,我们得到了这个__flags 参数。我在整个连接中都使用MSG_NOSIGNAL 标志。有没有办法在write 中实现这个标志功能?由于我在整个连接中都使用此标志,因此可以在创建 socket 时设置它。如果有办法实现所有__flag 功能,请随意提及。

【问题讨论】:

    标签: c++ linux sockets


    【解决方案1】:

    没有。当使用write 写入套接字时,这与使用设置为零的flags 参数调用send 相同。

    来自official POSIX reference

    如果 fildes 指的是一个套接字,write() 应该等价于 send() 而没有设置标志。


    然而,有一种方法可以永久“设置”这个标志,那就是忽略SIGPIPE 信号:

    signal(SIGPIPE, SIG_IGN);
    

    【讨论】:

    • 这会忽略进程所有连接的信号,无论如何你能帮我处理剩余的标志吗?我投了赞成票,但不能接受答案。谢谢!
    • @neckTwi 其他两个官方标志(以及recv 支持的标志是特定于正在发送(或接收)的消息,而不是可以在每个连接或每个套接字(或每个进程或每个线程)的基础。
    猜你喜欢
    • 2020-12-24
    • 1970-01-01
    • 2011-07-16
    • 2017-07-22
    • 2013-04-01
    • 1970-01-01
    • 2013-03-21
    • 2021-07-08
    • 2016-07-28
    相关资源
    最近更新 更多