C TCP套接字,使用select后可以'send'return0吗?

C TCP sockets, can 'send' return 0 after using select?

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

谢谢

*请注意,客户端仅连接到一台服务器。

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