Set only the client socket in non-blocking mode instead of all fds;
should avoid problems with stdio handles.
This commit is contained in:
parent
e39b676ae9
commit
f2616a2401
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -37,12 +36,8 @@ static struct timeout_user *timeout_tail; /* sorted timeouts list tail */
|
|||
/* register a user */
|
||||
void register_select_user( struct select_user *user )
|
||||
{
|
||||
int flags;
|
||||
assert( !users[user->fd] );
|
||||
|
||||
flags = fcntl( user->fd, F_GETFL, 0 );
|
||||
fcntl( user->fd, F_SETFL, flags | O_NONBLOCK );
|
||||
|
||||
users[user->fd] = user;
|
||||
if (user->fd > max_fd) max_fd = user->fd;
|
||||
nb_users++;
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
@ -287,9 +288,13 @@ static void client_event( int event, void *private )
|
|||
/* add a client */
|
||||
struct client *add_client( int fd, struct thread *self )
|
||||
{
|
||||
int flags;
|
||||
struct client *client = mem_alloc( sizeof(*client) );
|
||||
if (!client) return NULL;
|
||||
|
||||
flags = fcntl( fd, F_GETFL, 0 );
|
||||
fcntl( fd, F_SETFL, flags | O_NONBLOCK );
|
||||
|
||||
client->state = RUNNING;
|
||||
client->select.fd = fd;
|
||||
client->select.func = client_event;
|
||||
|
|
Loading…
Reference in New Issue