about summary refs log tree commit diff
path: root/src/network
Commit message (Collapse)AuthorAgeFilesLines
* improve SOCK_NONBLOCK/SOCK_CLOEXEC fallback codeRich Felker2012-11-051-1/+2
| | | | | | | | | | | | | | | | checking for EINVAL should be sufficient, but qemu user emulation returns EPROTONOSUPPORT in some of the failure cases, and it seems conceivable that other kernels doing linux-emulation could make the same mistake. since DNS lookups and other important code might break if the fallback does not get invoked, be extra careful and check for either error. note that it's important NOT to perform the fallback code on other errors such as resource-exhaustion cases, since the fallback is not atomic and will lead to file-descriptor leaks in multi-threaded programs that use exec. the fallback code is only "safe" to run when the initial failure is caused by the application's choice of arguments, not the system state.
* fix some more O_CLOEXEC/SOCK_CLOEXEC issuesRich Felker2012-09-291-3/+1
|
* move accept4, dup3, and pipe2 to non-linux-specific locationsRich Felker2012-09-291-0/+9
| | | | | these interfaces have been adopted by the Austin Group for inclusion in the next version of POSIX.
* emulate SOCK_CLOEXEC and SOCK_NONBLOCK for old (pre-2.6.27) kernelsRich Felker2012-09-291-1/+14
| | | | | | | | | | | | | | | also update syslog to use SOCK_CLOEXEC rather than separate fcntl step, to make it safe in multithreaded programs that run external programs. emulation is not atomic; it could be made atomic by holding a lock on forking during the operation, but this seems like overkill. my goal is not to achieve perfect behavior on old kernels (which have plenty of other imperfect behavior already) but to avoid catastrophic breakage in (1) syslog, which would give no output on old kernels with the change to use SOCK_CLOEXEC, and (2) programs built on a new kernel where configure scripts detected a working SOCK_CLOEXEC, which later get run on older kernels (they may otherwise fail to work completely).
* fix getaddrinfo to accept port 0 (zero)Rich Felker2012-09-221-2/+2
| | | | | | | | new behavior can be summarized as: inputs that parse completely as a decimal number are treated as one, and rejected only if the result is out of 16-bit range. inputs that do not parse as a decimal number (where strtoul leaves anything left over in the input) are searched in /etc/services.
* use restrict everywhere it's required by c99 and/or posix 2008Rich Felker2012-09-069-11/+11
| | | | | | | | to deal with the fact that the public headers may be used with pre-c99 compilers, __restrict is used in place of restrict, and defined appropriately for any supported compiler. we also avoid the form [restrict] since older versions of gcc rejected it due to a bug in the original c99 standard, and instead use the form *restrict.
* remove scanf dependency from getaddrinfo /etc/services supportRich Felker2012-07-221-5/+4
|
* getaddrinfo /etc/services lookup supportRich Felker2012-07-221-3/+16
|
* make getservby*_r return error code rather than -1 (and using errno)Rich Felker2012-07-222-19/+35
| | | | untested but should be correct..
* fix logic error for skipping failed interfaces in if_nameindexRich Felker2012-07-211-8/+7
|
* fix getservby*() with null pointer for protocol argumentRich Felker2012-07-142-0/+8
| | | | not sure this is the best fix but it should work
* workaround another sendmsg kernel bug on 64-bit machinesRich Felker2012-07-121-0/+13
| | | | | | | | | the kernel wrongly expects the cmsg length field to be size_t instead of socklen_t. in order to work around the issue, we have to impose a length limit and copy to a local buffer. the length limit should be more than sufficient for any real-world use; these headers are only used for passing file descriptors and permissions between processes over unix sockets.
* fix misplaced semicolon in preprocessor directive (#undef h_errno)Rich Felker2012-05-161-1/+1
|
* use __h_errno_location for h_errnoRich Felker2012-05-122-0/+9
| | | | | | we do not bother making h_errno thread-local since the only interfaces that use it are inherently non-thread-safe. but still use the potentially-thread-local ABI to access it just to avoid lock-in.
* improve name lookup performance in corner casesRich Felker2012-04-012-2/+2
| | | | | | | | | | | the buffer in getaddrinfo really only matters when /etc/hosts is huge, but in that case, the huge number of syscalls resulting from a tiny buffer would seriously impact the performance of every name lookup. the buffer in __dns.c has also been enlarged a bit so that typical resolv.conf files will fit fully in the buffer. there's no need to make it so large as to dominate the syscall overhead for large files, because resolv.conf should never be large.
* fix for previous incorrect fix of cancellation in dns lookupsRich Felker2012-02-231-3/+4
| | | | | uninitialized file descriptor was being closed on return, causing stdin to be closed in many cases.
* fix default nameserver when resolv.conf doesn't existRich Felker2012-02-111-1/+2
|
* fix illegal goto out of cleanup context in dns lookupsRich Felker2012-02-111-3/+3
|
* make dns lookups (and thus getaddrinfo) cancellableRich Felker2011-09-211-4/+11
|
* use poll rather than select in dns lookups (also clock_gettime)Rich Felker2011-09-211-12/+10
| | | | | | | | | | if the file descriptor resource limit has been increased past FD_SETSIZE, this is actually a security issue; we could write past the end of the fd_set object. using poll makes it a non-issue, and simplifies the code at the same time. also, use clock_gettime instead of gettimeofday, for reduced bloat and better entropy.
* remove some stray trailing space charactersRich Felker2011-09-132-2/+2
|
* implement if_nameindex and if_freenameindexRich Felker2011-08-032-0/+65
|
* fix wrong messages in gai_strerrorRich Felker2011-08-011-0/+2
| | | | i had missed the fact that a couple values were unassigned...
* port numbers should always be interpreted as decimalRich Felker2011-08-011-1/+1
| | | | | | | | | | | per POSIX and RFC 3493: If the specified address family is AF_INET, AF_INET6, or AF_UNSPEC, the service can be specified as a string specifying a decimal port number. 021 is a valid decimal number, therefore, interpreting it as octal seems to be non-conformant.
* "implement" getnetbyaddr and getnetbynameRich Felker2011-07-121-0/+12
| | | | | these are useless legacy functions but some old software contains cruft that expects them to exist...
* res_search symbol, aliased to res_query for now (better than nothing)Rich Felker2011-06-301-0/+3
|
* fix bug in ipv6 parsing that prevented parsing a lone "::"Rich Felker2011-04-251-4/+1
|
* ipv6 parsing code (formerly dummied-out)Rich Felker2011-04-252-8/+62
|
* fix bogus return values for inet_ptonRich Felker2011-04-211-2/+2
|
* disallow blank strings as service or host nameRich Felker2011-04-201-0/+3
|
* fix bugs in ipv4 parsingRich Felker2011-04-201-1/+2
|
* dns lookups: protect against cancellation and fix incorrect error codesRich Felker2011-04-181-4/+10
|
* overhaul pthread cancellationRich Felker2011-04-176-28/+6
| | | | | | | | | | | | | | | | | | | | | | this patch improves the correctness, simplicity, and size of cancellation-related code. modulo any small errors, it should now be completely conformant, safe, and resource-leak free. the notion of entering and exiting cancellation-point context has been completely eliminated and replaced with alternative syscall assembly code for cancellable syscalls. the assembly is responsible for setting up execution context information (stack pointer and address of the syscall instruction) which the cancellation signal handler can use to determine whether the interrupted code was in a cancellable state. these changes eliminate race conditions in the previous generation of cancellation handling code (whereby a cancellation request received just prior to the syscall would not be processed, leaving the syscall to block, potentially indefinitely), and remedy an issue where non-cancellable syscalls made from signal handlers became cancellable if the signal handler interrupted a cancellation point. x86_64 asm is untested and may need a second try to get it right.
* optimize ntohl etc. in terms of bswap functionsRich Felker2011-04-124-20/+12
| | | | | | | we can do this without violating the namespace now that they are macros/inline functions rather than extern functions. the motivation is that gcc was generating giant, slow, horrible code for the old functions, and now generates a single byte-swapping instruction.
* workaround broken msghdr struct on 64bit linuxRich Felker2011-04-082-0/+21
| | | | | | | | | | | POSIX clearly specifies the type of msg_iovlen and msg_controllen, and Linux ignores it and makes them both size_t instead. to work around this we add padding (instead of just using the wrong types like glibc does), but we also need to patch-up the struct before passing it to the kernel in case the caller did not zero-fill it. if i could trust the kernel to just ignore the upper 32 bits, this would not be necessary, but i don't think it will ignore them...
* fix ipv6 address printing: 2001 appeared as 201, etc.Rich Felker2011-04-081-3/+5
|
* fix broken dns response parsing code that made most ipv6 lookups failRich Felker2011-04-081-4/+6
|
* return the requested string as the "canonical name" for numeric addressesRich Felker2011-04-081-0/+1
| | | | | | | | previously NULL was returned in ai_canonname, resulting in crashes in some callers. this behavior was incorrect. note however that the new behavior differs from glibc, which performs reverse dns lookups. POSIX is very clear that a reverse DNS lookup must not be performed for numeric addresses.
* fix uninitialized variables in dns lookup codeRich Felker2011-04-071-2/+2
|
* add _res (__res_state()) dummyRich Felker2011-04-061-0/+9
|
* implement if_indextoname and if_nametoindex functionsRich Felker2011-04-052-0/+36
|
* fix all implicit conversion between signed/unsigned pointersRich Felker2011-03-251-1/+1
| | | | | | | sadly the C language does not specify any such implicit conversion, so this is not a matter of just fixing warnings (as gcc treats it) but actual errors. i would like to revisit a number of these changes and possibly revise the types used to reduce the number of casts required.
* cleanup socketcall syscall interface to ease porting to sane(r) archsRich Felker2011-02-1519-94/+17
|
* another pointer signedness fixRich Felker2011-02-141-1/+1
|
* initial check-in, version 0.5.0 v0.5.0Rich Felker2011-02-1255-0/+1570