mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-30 04:10:54 -08:00
Prefer SOCK_NONBLOCK to O_NONBLOCK
* src/process.c (SOCK_NONBLOCK): Define to 0 if not already defined. (connect_network_socket): Create the socket with SOCK_NONBLOCK, to avoid an fcntl with O_NONBLOCK if SOCK_NONBLOCK works. Put the SOCK_DGRAM check a bit later, to keep the logic cleaner, as the order does not matter here.
This commit is contained in:
parent
e5015c5d96
commit
f2d0333481
1 changed files with 13 additions and 7 deletions
|
|
@ -150,6 +150,9 @@ bool inhibit_sentinels;
|
|||
#ifndef SOCK_CLOEXEC
|
||||
# define SOCK_CLOEXEC 0
|
||||
#endif
|
||||
#ifndef SOCK_NONBLOCK
|
||||
# define SOCK_NONBLOCk 0
|
||||
#endif
|
||||
|
||||
/* True if ERRNUM represents an error where the system call would
|
||||
block if a blocking variant were used. */
|
||||
|
|
@ -3141,7 +3144,10 @@ connect_network_socket (Lisp_Object proc, Lisp_Object ip_addresses,
|
|||
s = socket_to_use;
|
||||
if (s < 0)
|
||||
{
|
||||
s = socket (family, p->socktype | SOCK_CLOEXEC, p->ai_protocol);
|
||||
int socktype = p->socktype | SOCK_CLOEXEC;
|
||||
if (p->is_non_blocking_client)
|
||||
socktype |= SOCK_NONBLOCK;
|
||||
s = socket (family, socktype, p->ai_protocol);
|
||||
if (s < 0)
|
||||
{
|
||||
xerrno = errno;
|
||||
|
|
@ -3149,12 +3155,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object ip_addresses,
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef DATAGRAM_SOCKETS
|
||||
if (!p->is_server && p->socktype == SOCK_DGRAM)
|
||||
break;
|
||||
#endif /* DATAGRAM_SOCKETS */
|
||||
|
||||
if (p->is_non_blocking_client)
|
||||
if (p->is_non_blocking_client && ! (SOCK_NONBLOCK && socket_to_use < 0))
|
||||
{
|
||||
ret = fcntl (s, F_SETFL, O_NONBLOCK);
|
||||
if (ret < 0)
|
||||
|
|
@ -3166,6 +3167,11 @@ connect_network_socket (Lisp_Object proc, Lisp_Object ip_addresses,
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef DATAGRAM_SOCKETS
|
||||
if (!p->is_server && p->socktype == SOCK_DGRAM)
|
||||
break;
|
||||
#endif /* DATAGRAM_SOCKETS */
|
||||
|
||||
/* Make us close S if quit. */
|
||||
record_unwind_protect_int (close_file_unwind, s);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue