mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-19 13:32:58 +03:00
tpws: display SO_ERROR on EPOLLHUP/EPOLLERR in debug=1
This commit is contained in:
parent
ad5c9e8675
commit
a0637216b3
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -91,6 +91,14 @@ static bool socks_send_rep_errno(uint8_t ver, int fd, int errn)
|
|||||||
{
|
{
|
||||||
return ver==5 ? socks5_send_rep_errno(fd,errn) : socks4_send_rep_errno(fd, errn);
|
return ver==5 ? socks5_send_rep_errno(fd,errn) : socks4_send_rep_errno(fd, errn);
|
||||||
}
|
}
|
||||||
|
static int get_so_error(int fd)
|
||||||
|
{
|
||||||
|
int errn;
|
||||||
|
socklen_t optlen = sizeof(errn);
|
||||||
|
if(getsockopt(fd, SOL_SOCKET, SO_ERROR, &errn, &optlen) == -1)
|
||||||
|
errn=errno;
|
||||||
|
return errn;
|
||||||
|
}
|
||||||
static bool proxy_remote_conn_ack(tproxy_conn_t *conn)
|
static bool proxy_remote_conn_ack(tproxy_conn_t *conn)
|
||||||
{
|
{
|
||||||
// if proxy mode acknowledge connection request
|
// if proxy mode acknowledge connection request
|
||||||
@ -102,10 +110,7 @@ static bool proxy_remote_conn_ack(tproxy_conn_t *conn)
|
|||||||
case CONN_TYPE_SOCKS:
|
case CONN_TYPE_SOCKS:
|
||||||
if (conn->partner->socks_state==S_WAIT_CONNECTION)
|
if (conn->partner->socks_state==S_WAIT_CONNECTION)
|
||||||
{
|
{
|
||||||
int errn;
|
int errn=get_so_error(conn->fd);
|
||||||
socklen_t optlen = sizeof(errn);
|
|
||||||
if(getsockopt(conn->fd, SOL_SOCKET, SO_ERROR, &errn, &optlen) == -1)
|
|
||||||
errn=errno;
|
|
||||||
conn->partner->socks_state=S_TCP;
|
conn->partner->socks_state=S_TCP;
|
||||||
bres = socks_send_rep_errno(conn->partner->socks_ver,conn->partner->fd, errn);
|
bres = socks_send_rep_errno(conn->partner->socks_ver,conn->partner->fd, errn);
|
||||||
DBGPRINT("socks connection acknowledgement. bres=%d remote_errn=%d remote_fd=%d local_fd=%d",bres,errn,conn->fd,conn->partner->fd)
|
DBGPRINT("socks connection acknowledgement. bres=%d remote_errn=%d remote_fd=%d local_fd=%d",bres,errn,conn->fd,conn->partner->fd)
|
||||||
@ -1310,8 +1315,16 @@ int event_loop(int listen_fd)
|
|||||||
{
|
{
|
||||||
if (events[i].events & (EPOLLHUP|EPOLLERR))
|
if (events[i].events & (EPOLLHUP|EPOLLERR))
|
||||||
{
|
{
|
||||||
if (events[i].events & EPOLLERR) DBGPRINT("EPOLLERR")
|
int errn = get_so_error(conn->fd);
|
||||||
if (events[i].events & EPOLLHUP) DBGPRINT("EPOLLHUP")
|
const char *se;
|
||||||
|
switch (events[i].events & (EPOLLHUP|EPOLLERR))
|
||||||
|
{
|
||||||
|
case EPOLLERR: se="EPOLLERR"; break;
|
||||||
|
case EPOLLHUP: se="EPOLLHUP"; break;
|
||||||
|
case EPOLLHUP|EPOLLERR: se="EPOLLERR EPOLLHUP"; break;
|
||||||
|
default: se=NULL;
|
||||||
|
}
|
||||||
|
VPRINT("Socket fd=%d (partner_fd=%d, remote=%d) %s so_error=%d (%s)",conn->fd,conn->partner ? conn->partner->fd : 0,conn->remote,se,errn,strerror(errn));
|
||||||
proxy_remote_conn_ack(conn);
|
proxy_remote_conn_ack(conn);
|
||||||
read_all_and_buffer(conn,3);
|
read_all_and_buffer(conn,3);
|
||||||
conn_close_with_partner_check(&conn_list,&close_list,conn);
|
conn_close_with_partner_check(&conn_list,&close_list,conn);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user