Skip to content
Snippets Groups Projects
Commit 7a0f96c9 authored by Ove Kåven's avatar Ove Kåven Committed by Alexandre Julliard
Browse files

Adapted Winsock to Linux 2.4 TCP socket poll() behaviour

(thanks to Berend Ozceri for finding the problem).
parent a1ce9161
No related branches found
No related tags found
No related merge requests found
......@@ -83,6 +83,14 @@ static void sock_reselect( struct sock *sock )
if (debug_level)
fprintf(stderr,"sock_reselect(%d): new mask %x\n", sock->obj.fd, ev);
if (sock->obj.select == -1) {
/* previously unconnected socket, is this reselect supposed to connect it? */
if (!sock->state) return;
/* ok, it is, attach it to the wineserver's main poll loop */
add_select_user( &sock->obj );
}
/* update condition mask */
set_select_events( &sock->obj, ev );
/* check whether condition is satisfied already */
......@@ -288,8 +296,9 @@ static struct object *create_socket( int family, int type, int protocol )
return NULL;
}
fcntl(sockfd, F_SETFL, O_NONBLOCK); /* make socket nonblocking */
if (!(sock = alloc_object( &sock_ops, sockfd ))) return NULL;
sock->state = (type!=SOCK_STREAM) ? WS_FD_READ|WS_FD_WRITE : 0;
if (!(sock = alloc_object( &sock_ops, -1 ))) return NULL;
sock->obj.fd = sockfd;
sock->state = (type != SOCK_STREAM) ? (WS_FD_READ|WS_FD_WRITE) : 0;
sock->mask = 0;
sock->hmask = 0;
sock->pmask = 0;
......@@ -323,12 +332,13 @@ static struct object *accept_socket( int handle )
release_object( sock );
return NULL;
}
if (!(acceptsock = alloc_object( &sock_ops, acceptfd )))
if (!(acceptsock = alloc_object( &sock_ops, -1 )))
{
release_object( sock );
return NULL;
}
acceptsock->obj.fd = acceptfd;
acceptsock->state = WS_FD_CONNECTED|WS_FD_READ|WS_FD_WRITE;
acceptsock->mask = sock->mask;
acceptsock->hmask = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment