version 1.64, 2006/03/30 09:58:16 |
version 1.65, 2006/04/16 00:54:10 |
|
|
send_msg(int fd, Buffer *m) |
send_msg(int fd, Buffer *m) |
{ |
{ |
u_char mlen[4]; |
u_char mlen[4]; |
|
struct iovec iov[2]; |
|
|
if (buffer_len(m) > SFTP_MAX_MSG_LENGTH) |
if (buffer_len(m) > SFTP_MAX_MSG_LENGTH) |
fatal("Outbound message too long %u", buffer_len(m)); |
fatal("Outbound message too long %u", buffer_len(m)); |
|
|
/* Send length first */ |
/* Send length first */ |
put_u32(mlen, buffer_len(m)); |
put_u32(mlen, buffer_len(m)); |
if (atomicio(vwrite, fd, mlen, sizeof(mlen)) != sizeof(mlen)) |
iov[0].iov_base = mlen; |
fatal("Couldn't send packet: %s", strerror(errno)); |
iov[0].iov_len = sizeof(mlen); |
|
iov[1].iov_base = buffer_ptr(m); |
if (atomicio(vwrite, fd, buffer_ptr(m), buffer_len(m)) != buffer_len(m)) |
iov[1].iov_len = buffer_len(m); |
|
|
|
if (atomiciov(writev, fd, iov, 2) != buffer_len(m) + sizeof(mlen)) |
fatal("Couldn't send packet: %s", strerror(errno)); |
fatal("Couldn't send packet: %s", strerror(errno)); |
|
|
buffer_clear(m); |
buffer_clear(m); |