mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 17:51:28 +00:00
Added write baton to tcp sends so we follow spec
This commit is contained in:
parent
53beefd19b
commit
1ada60b611
@ -134,24 +134,34 @@ void EQ::Net::TCPConnection::Write(const char *data, size_t count)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct WriteBaton
|
||||||
|
{
|
||||||
|
TCPConnection *connection;
|
||||||
|
char *buffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
WriteBaton *baton = new WriteBaton;
|
||||||
|
baton->connection = this;
|
||||||
|
baton->buffer = new char[count];;
|
||||||
|
|
||||||
uv_write_t *write_req = new uv_write_t;
|
uv_write_t *write_req = new uv_write_t;
|
||||||
memset(write_req, 0, sizeof(uv_write_t));
|
memset(write_req, 0, sizeof(uv_write_t));
|
||||||
write_req->data = this;
|
write_req->data = baton;
|
||||||
uv_buf_t send_buffers[1];
|
uv_buf_t send_buffers[1];
|
||||||
|
|
||||||
char *data_out = new char[count];
|
memcpy(baton->buffer, data, count);
|
||||||
memcpy(data_out, data, count);
|
send_buffers[0] = uv_buf_init(baton->buffer, count);
|
||||||
send_buffers[0] = uv_buf_init(data_out, count);
|
|
||||||
write_req->data = send_buffers[0].base;
|
|
||||||
|
|
||||||
uv_write(write_req, (uv_stream_t*)m_socket, send_buffers, 1, [](uv_write_t* req, int status) {
|
uv_write(write_req, (uv_stream_t*)m_socket, send_buffers, 1, [](uv_write_t* req, int status) {
|
||||||
EQ::Net::TCPConnection *connection = (EQ::Net::TCPConnection*)req->data;
|
WriteBaton *baton = (WriteBaton*)req->data;
|
||||||
delete[] (char*)req->data;
|
delete[] baton->buffer;
|
||||||
delete req;
|
delete req;
|
||||||
|
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
connection->Disconnect();
|
baton->connection->Disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete baton;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user