<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><font size="3">Hi everyone,</font><div style="font-size: 16px;">I encounter a problem:</div><div><font size="3">While server socket is sending</font><font face="Verdana, Arial, Helvetica, sans-serif" size="3" style="font-size: 16px;"><span style="line-height: normal;"> packets, client socket closes, then I find the socket's send_pend( inet:getstat(Socket, [send_pend]</span></font><span style="font-size: 16px; line-height: normal; font-family: Verdana, Arial, Helvetica, sans-serif;">) ) is always > 0, that is some data isn't sent out. After closing the port, I find the p</span><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><span style="line-height: normal;">ort is still included in erlang:ports(), but erlang:port_info(Port) returnes 'undefined'. I guess that because the port's send queue is not empty, the erts set the port's status to be ERTS_PORT_SFLG_CLOSING, so the results between </span></font><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: medium; line-height: normal;">erlang:ports() and </span><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: medium; line-height: normal;">erlang:port_info() are </span><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><span style="line-height: normal;">inconsistent. The code:</span></font></div><div><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><span style="line-height: normal;"><br></span></font></div><div><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><span style="line-height: normal;"><div>void erts_do_exit_port(Port *p, Eterm from, Eterm reason)</div><div>{</div><div>   ...</div><div>   if ((reason != am_kill) && !is_port_ioq_empty(p)) {</div><div>       erts_port_status_bandor_set(p,</div><div>                                        ~ERTS_PORT_SFLG_EXITING, /* must turn it off */</div><div>                                        ERTS_PORT_SFLG_CLOSING);</div><div>      flush_port(p);</div><div>   }</div><div>   ...</div><div>}</div><div><br></div><div>The problem can only exist with TCP option: {delay_send, true}. When set {delay_send, false}, the problem disappears.</div></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><span style="line-height: normal;"><div><br></div><div>In addition, on this occasion erlang:halt() cannot terminate the node, have to use erlang:halt(Status, [{flush,false}]).</div><div><br></div><div>Can anyone help me? Thanks in advance!</div></span></font></div><div><span style="line-height: normal; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: medium;"></span></div><div><br></div></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>