【问题标题】:C TCP sockets, can 'send' return 0 after using select?C TCP套接字,使用select后可以'发送'返回0吗?
【发布时间】:2016-03-03 10:23:06
【问题描述】:

我在 c 中有一个客户端-服务器程序。 我正在使用 select 来确保客户端已准备好接受数据(即 - client_fd 在 select 返回的 write_fds 中)。 如果客户端确实准备好接受数据,我能否确定如果我发送给这个客户端(使用c方法'send',并且要发送的字节数> 0),实际发送的字节数(= =由“发送”返回)至少为 1 个字节?还是 0 仍然可能?

谢谢

*请注意,客户端只连接到一个服务器,没有其他任何东西。

【问题讨论】:

    标签: c sockets select asynchronous client-server


    【解决方案1】:

    零是不可能的。它将传输至少一个字节并返回成本,或者如果缓冲区在非阻塞模式下已满,则返回 -1 和 errno == EAGAIN/EWOULDBLOCK,或者如果出现严重错误,则返回 -1 和其他一些 errno。如果select() 另有指示,则不应给出-1/EAGAIN/EWOULDBLOCK,除非存在多线程写入套接字。

    【讨论】:

    • 好吧,技术上是错误的。除了上面列出的这两个错误之外,还有更多的错误可以触发 send 返回 -1。最重要的当然是在另一边关闭套接字。
    • 当然不止这两个错误。答案是关于问题中提到的情况。
    • 需要引用。
    猜你喜欢
    • 2011-03-06
    • 2015-03-01
    • 1970-01-01
    • 2013-11-10
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多