ACE_Stream中提供recv_n函数,该函数要求输入参数len表示要接受的字节数。当代码中调用该函数时,程序会一直阻塞在recv_n函数调用的地方,只到recv_n对应的描叙符接收到了len个字节或者连接断开。recv_n代码:ACE::recv_n_i (ACE_HANDLE handle, void *buf, size_t len, int flags, size_t *bt) { size_t temp; size_t &bytes_transferred = bt == 0 ? temp : *bt; ssize_t n; for (bytes_transferred = 0; bytes_transferred < len; bytes_transferred += n) { // Try to transfer as much of the remaining data as possible. n = ACE_OS::recv (handle, static_cast <char *> (buf) + bytes_transferred, len - bytes_transferred, flags); // Check EOF. if (n == 0) return 0; // Check for other errors. if (n == -1) { // Check for possible blocking. if (errno == EWOULDBLOCK) { // Wait for the blocking to subside. int const result = ACE::handle_read_ready (handle, 0); // Did select() succeed? if (result != -1) { // Blocking subsided. Continue data transfer. n = 0; continue; } } // Other data transfer or select() failures. return -1; } } return static_cast<ssize_t> (bytes_transferred); }