Commit 3591e5fd authored by Bruno Jesus's avatar Bruno Jesus Committed by Alexandre Julliard

server: Store the time of the socket connection.

Based on a patch by Erich Hoover.
parent 8821967b
...@@ -107,6 +107,7 @@ struct sock ...@@ -107,6 +107,7 @@ struct sock
unsigned int message; /* message to send */ unsigned int message; /* message to send */
obj_handle_t wparam; /* message wparam (socket handle) */ obj_handle_t wparam; /* message wparam (socket handle) */
int errors[FD_MAX_EVENTS]; /* event errors */ int errors[FD_MAX_EVENTS]; /* event errors */
timeout_t connect_time;/* time the socket was connected */
struct sock *deferred; /* socket that waits for a deferred accept */ struct sock *deferred; /* socket that waits for a deferred accept */
struct async_queue *read_q; /* queue for asynchronous reads */ struct async_queue *read_q; /* queue for asynchronous reads */
struct async_queue *write_q; /* queue for asynchronous writes */ struct async_queue *write_q; /* queue for asynchronous writes */
...@@ -401,6 +402,7 @@ static void sock_poll_event( struct fd *fd, int event ) ...@@ -401,6 +402,7 @@ static void sock_poll_event( struct fd *fd, int event )
/* we got connected */ /* we got connected */
sock->state |= FD_WINE_CONNECTED|FD_READ|FD_WRITE; sock->state |= FD_WINE_CONNECTED|FD_READ|FD_WRITE;
sock->state &= ~FD_CONNECT; sock->state &= ~FD_CONNECT;
sock->connect_time = current_time;
} }
} }
else if (sock->state & FD_WINE_LISTENING) else if (sock->state & FD_WINE_LISTENING)
...@@ -618,6 +620,7 @@ static void init_sock(struct sock *sock) ...@@ -618,6 +620,7 @@ static void init_sock(struct sock *sock)
sock->window = 0; sock->window = 0;
sock->message = 0; sock->message = 0;
sock->wparam = 0; sock->wparam = 0;
sock->connect_time = 0;
sock->deferred = NULL; sock->deferred = NULL;
sock->read_q = NULL; sock->read_q = NULL;
sock->write_q = NULL; sock->write_q = NULL;
...@@ -725,6 +728,7 @@ static struct sock *accept_socket( obj_handle_t handle ) ...@@ -725,6 +728,7 @@ static struct sock *accept_socket( obj_handle_t handle )
acceptsock->family = sock->family; acceptsock->family = sock->family;
acceptsock->window = sock->window; acceptsock->window = sock->window;
acceptsock->message = sock->message; acceptsock->message = sock->message;
acceptsock->connect_time = current_time;
if (sock->event) acceptsock->event = (struct event *)grab_object( sock->event ); if (sock->event) acceptsock->event = (struct event *)grab_object( sock->event );
acceptsock->flags = sock->flags; acceptsock->flags = sock->flags;
if (!(acceptsock->fd = create_anonymous_fd( &sock_fd_ops, acceptfd, &acceptsock->obj, if (!(acceptsock->fd = create_anonymous_fd( &sock_fd_ops, acceptfd, &acceptsock->obj,
...@@ -778,6 +782,7 @@ static int accept_into_socket( struct sock *sock, struct sock *acceptsock ) ...@@ -778,6 +782,7 @@ static int accept_into_socket( struct sock *sock, struct sock *acceptsock )
acceptsock->family = sock->family; acceptsock->family = sock->family;
acceptsock->wparam = 0; acceptsock->wparam = 0;
acceptsock->deferred = NULL; acceptsock->deferred = NULL;
acceptsock->connect_time = current_time;
release_object( acceptsock->fd ); release_object( acceptsock->fd );
acceptsock->fd = newfd; acceptsock->fd = newfd;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment