1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-23 09:57:40 +03:00

r15700: Make nmbd udp sockets non-blocking to prevent problem

with select returning true but no data being available.
Fix for bug #3779.
Jeremy.
This commit is contained in:
Jeremy Allison 2006-05-18 19:49:44 +00:00 committed by Gerald (Jerry) Carter
parent 7d766b5505
commit e5787cf75b
6 changed files with 14 additions and 9 deletions

View File

@ -278,7 +278,12 @@ ssize_t read_udp_socket(int fd,char *buf,size_t len)
memset((char *)&lastip,'\0',sizeof(lastip));
ret = (ssize_t)sys_recvfrom(fd,buf,len,0,(struct sockaddr *)&sock,&socklen);
if (ret <= 0) {
DEBUG(2,("read socket failed. ERRNO=%s\n",strerror(errno)));
/* Don't print a low debug error for a non-blocking socket. */
if (errno == EAGAIN) {
DEBUG(10,("read socket returned EAGAIN. ERRNO=%s\n",strerror(errno)));
} else {
DEBUG(2,("read socket failed. ERRNO=%s\n",strerror(errno)));
}
return(0);
}

View File

@ -605,6 +605,10 @@ static BOOL open_sockets(BOOL isdaemon, int port)
set_socket_options( ClientNMB, "SO_BROADCAST" );
set_socket_options( ClientDGRAM, "SO_BROADCAST" );
/* Ensure we're non-blocking. */
set_blocking( ClientNMB, False);
set_blocking( ClientDGRAM, False);
DEBUG( 3, ( "open_sockets: Broadcast sockets opened.\n" ) );
return( True );
}

View File

@ -23,8 +23,6 @@
#include "includes.h"
extern int ClientNMB;
int num_response_packets = 0;
/***************************************************************************

View File

@ -23,8 +23,6 @@
#include "includes.h"
extern int ClientNMB;
int updatecount = 0;
/*******************************************************************

View File

@ -26,8 +26,6 @@
#include "includes.h"
extern struct in_addr loopback_ip;
extern int ClientNMB;
extern int ClientDGRAM;
extern int global_nmb_port;
/* This is the broadcast subnets database. */
@ -118,6 +116,10 @@ static struct subnet_record *make_subnet(const char *name, enum subnet_type type
/* Make sure we can broadcast from these sockets. */
set_socket_options(nmb_sock,"SO_BROADCAST");
set_socket_options(dgram_sock,"SO_BROADCAST");
/* Set them non-blocking. */
set_blocking(nmb_sock, False);
set_blocking(dgram_sock, False);
}
subrec = SMB_MALLOC_P(struct subnet_record);

View File

@ -23,8 +23,6 @@
#include "includes.h"
extern int ClientNMB;
extern uint16 samba_nb_type;
int workgroup_count = 0; /* unique index key: one for each workgroup */