libssh2_channel_write_ex
매뉴얼 페이지에서 :채널이 차단되지 않을 때 libssh2_channel_write의 동작
실패시 실제 기록 된 바이트 수 또는 음수입니다. LIBSSH2_ERROR_EAGAIN 그렇지 않으면 을 차단합니다. LIBSSH2_ERROR_EAGAIN은 음수 숫자이지만 실제로는 se 당 실패하지 않습니다.
이제 문제가 생겼습니다. LIBSSH2_ERROR_EAGAIN
을받을 때 아무 것도 전송되지 않고 모든 데이터를 다시 보내야한다는 의미입니까? 또는 일부 데이터가 전송되었음을 의미합니까?
내 문제는 기본 소켓이 보유 할 수있는 더 많은 데이터를 보내려고하면 write()
이 어쨌든 차단되어야한다는 것입니다. 이후로 어떻게하면 큰 블록을 보낼 수 있습니까? 매번 LIBSSH2_ERROR_EAGAIN
하지 않고 데이터?
같이 간다? – sarnold
@sarnold : 사실 저는 엄청난 양의 데이터를 보내려고하고 있지 않지만 한 번에 여러 개의 열린 채널에 데이터를 보내고 있습니다. 모든 채널 버퍼 크기의 합이 기본 소켓 버퍼 크기보다 작아야한다는 것을 의미해야합니까? – kriss
I _think_ 커널 전송 버퍼를 초과하면 (즉,'write (2)'는 전달한 버퍼의 길이보다 작은 값을 반환합니다) 짧은 쓰기 만하면됩니다. 따라서 모든 " 잠재적 인 짧은 글을 준비하기 위해 코드를 작성한 경우 "그냥 작동"하십시오. 하지만 전에 libssh2 라이브러리를 사용 해 본 적이 없으며, 필자는 libssh2 라이브러리가 무엇을 할지를 충분히 확신하지 못했습니다. :) 당신이 보낸 최대 블록이 32k라면, 버퍼가 한 개의'write (2)'에서 처리 할만큼 충분히 큰지 확인하십시오. – sarnold