summaryrefslogtreecommitdiff
path: root/src/network
AgeCommit message (Collapse)AuthorLines
2012-12-19add inet_network (required for wine)rofl0r-0/+11
2012-11-05improve SOCK_NONBLOCK/SOCK_CLOEXEC fallback codeRich Felker-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.
2012-09-29fix some more O_CLOEXEC/SOCK_CLOEXEC issuesRich Felker-3/+1
2012-09-29move accept4, dup3, and pipe2 to non-linux-specific locationsRich Felker-0/+9
these interfaces have been adopted by the Austin Group for inclusion in the next version of POSIX.
2012-09-29emulate SOCK_CLOEXEC and SOCK_NONBLOCK for old (pre-2.6.27) kernelsRich Felker-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).
2012-09-22fix getaddrinfo to accept port 0 (zero)Rich Felker-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.
2012-09-06use restrict everywhere it's required by c99 and/or posix 2008Rich Felker-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.
2012-07-22remove scanf dependency from getaddrinfo /etc/services supportRich Felker-5/+4
2012-07-22getaddrinfo /etc/services lookup supportRich Felker-3/+16
2012-07-22make getservby*_r return error code rather than -1 (and using errno)Rich Felker-19/+35
untested but should be correct..
2012-07-21fix logic error for skipping failed interfaces in if_nameindexRich Felker-8/+7
2012-07-14fix getservby*() with null pointer for protocol argumentRich Felker-0/+8
not sure this is the best fix but it should work
2012-07-12workaround another sendmsg kernel bug on 64-bit machinesRich Felker-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.
2012-05-16fix misplaced semicolon in preprocessor directive (#undef h_errno)Rich Felker-1/+1
2012-05-12use __h_errno_location for h_errnoRich Felker-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.
2012-04-01improve name lookup performance in corner casesRich Felker-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.
2012-02-23fix for previous incorrect fix of cancellation in dns lookupsRich Felker-3/+4
uninitialized file descriptor was being closed on return, causing stdin to be closed in many cases.
2012-02-11fix default nameserver when resolv.conf doesn't existRich Felker-1/+2
2012-02-11fix illegal goto out of cleanup context in dns lookupsRich Felker-3/+3
2011-09-21make dns lookups (and thus getaddrinfo) cancellableRich Felker-4/+11
2011-09-21use poll rather than select in dns lookups (also clock_gettime)Rich Felker-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.
2011-09-13remove some stray trailing space charactersRich Felker-2/+2
2011-08-03implement if_nameindex and if_freenameindexRich Felker-0/+65
2011-08-01fix wrong messages in gai_strerrorRich Felker-0/+2
i had missed the fact that a couple values were unassigned...
2011-08-01port numbers should always be interpreted as decimalRich Felker-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.
2011-07-12"implement" getnetbyaddr and getnetbynameRich Felker-0/+12
these are useless legacy functions but some old software contains cruft that expects them to exist...
2011-06-30res_search symbol, aliased to res_query for now (better than nothing)Rich Felker-0/+3
2011-04-25fix bug in ipv6 parsing that prevented parsing a lone "::"Rich Felker-4/+1
2011-04-25ipv6 parsing code (formerly dummied-out)Rich Felker-8/+62
2011-04-21fix bogus return values for inet_ptonRich Felker-2/+2
2011-04-20disallow blank strings as service or host nameRich Felker-0/+3
2011-04-20fix bugs in ipv4 parsingRich Felker-1/+2
2011-04-18dns lookups: protect against cancellation and fix incorrect error codesRich Felker-4/+10
2011-04-17overhaul pthread cancellationRich Felker-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.
2011-04-12optimize ntohl etc. in terms of bswap functionsRich Felker-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.
2011-04-08workaround broken msghdr struct on 64bit linuxRich Felker-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...
2011-04-08fix ipv6 address printing: 2001 appeared as 201, etc.Rich Felker-3/+5
2011-04-08fix broken dns response parsing code that made most ipv6 lookups failRich Felker-4/+6
2011-04-08return the requested string as the "canonical name" for numeric addressesRich Felker-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.
2011-04-07fix uninitialized variables in dns lookup codeRich Felker-2/+2
2011-04-06add _res (__res_state()) dummyRich Felker-0/+9
2011-04-05implement if_indextoname and if_nametoindex functionsRich Felker-0/+36
2011-03-25fix all implicit conversion between signed/unsigned pointersRich Felker-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.
2011-02-15cleanup socketcall syscall interface to ease porting to sane(r) archsRich Felker-94/+17
2011-02-14another pointer signedness fixRich Felker-1/+1
2011-02-12initial check-in, version 0.5.0v0.5.0Rich Felker-0/+1570