int scp_tcp_force_send(int sck, char *data, int len) { int sent; int block; LOG_DBG("scp_tcp_force_send()"); block = scp_lock_fork_critical_section_start(); while (len > 0) { sent = g_tcp_send(sck, data, len, 0); if (sent == -1) { if (g_tcp_last_error_would_block(sck)) { g_sleep(1); } else { scp_lock_fork_critical_section_end(block); return 1; } } else if (sent == 0) { scp_lock_fork_critical_section_end(block); return 1; } else { data += sent; len -= sent; } } scp_lock_fork_critical_section_end(block); return 0; }
int DEFAULT_CC scp_tcp_force_recv(int sck, char* data, int len) { int rcvd; int block; LOG_DBG(s_log, "scp_tcp_force_recv()"); block = scp_lock_fork_critical_section_start(); while (len > 0) { rcvd = g_tcp_recv(sck, data, len, 0); if (rcvd == -1) { if (g_tcp_last_error_would_block(sck)) { g_sleep(1); } else { scp_lock_fork_critical_section_end(block); return 1; } } else if (rcvd == 0) { scp_lock_fork_critical_section_end(block); return 1; } else { data += rcvd; len -= rcvd; } } scp_lock_fork_critical_section_end(block); return 0; }