Oknet Xu created TS-4522:
----------------------------
Summary: did not check EPIPE on write_to_net_io
Key: TS-4522
URL: https://issues.apache.org/jira/browse/TS-4522
Project: Traffic Server
Issue Type: Bug
Components: Core, Network
Reporter: Oknet Xu
On a closed socket fd:
read(socketfd) return 0
write(socketfd) return EPIPE
In the write_to_net_io, we check the return value of write() with the same way
to read().
{code}
if (!r || r == -ECONNRESET) {
{code}
The bug makes no VC_EVENT_EOS callbacked while write_to_net_io, but
VC_EVENT_ERROR instead.
full code here:
{code}
int64_t r = vc->load_buffer_and_write(towrite, buf, total_written, needs);
if (total_written > 0) {
NET_SUM_DYN_STAT(net_write_bytes_stat, total_written);
s->vio.ndone += total_written;
}
// check for errors
if (r <= 0) { // if the socket was not ready,add to WaitList
if (r == -EAGAIN || r == -ENOTCONN) {
NET_INCREMENT_DYN_STAT(net_calls_to_write_nodata_stat);
if ((needs & EVENTIO_WRITE) == EVENTIO_WRITE) {
vc->write.triggered = 0;
nh->write_ready_list.remove(vc);
write_reschedule(nh, vc);
}
if ((needs & EVENTIO_READ) == EVENTIO_READ) {
vc->read.triggered = 0;
nh->read_ready_list.remove(vc);
read_reschedule(nh, vc);
}
return;
}
if (!r || r == -ECONNRESET) {
vc->write.triggered = 0;
write_signal_done(VC_EVENT_EOS, nh, vc);
return;
}
vc->write.triggered = 0;
write_signal_error(nh, vc, (int)-total_written);
return;
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)